zoukankan      html  css  js  c++  java
  • 2084 数塔HDU

    View Code
     1 #include <iostream>//2084 数塔
    2 #define max(a,b) (((a) > (b)) ? (a) : (b))
    3 #define mx 101
    4 using namespace std;
    5 int f[mx][mx],a[mx][mx];
    6 int fan(int i,int j)
    7 {
    8 if (f[i][j]!=-1)
    9 {
    10 return f[i][j];
    11 }
    12 else
    13 return max(f[i+1][j]=fan(i+1,j),f[i][j+1]=fan(i,j+1))+a[i][j];
    14 }
    15 int main()
    16 {
    17 int t,n,i,j,l;
    18 cin>>t;
    19 while(t--)
    20 {
    21 cin>>n;
    22 for(l=2;l<=n+1;l++)
    23 for (i=1;i<l;i++)
    24 {
    25 cin>>a[l-i][i];
    26 f[l-i][i]=-1;
    27 }
    28 for(i=1;i<=n;i++)//初始化f[n]
    29 f[n-i+1][i]=a[n-i+1][i];
    30 printf("%d\n",fan(1,1));
    31 }
    32 return 0;
    33 }
    34 /*
    35 1 1
    36 2 2 3
    37 3 4 5 6
    38 4 7 8 9 10
    39 5 11 12 13 14
    40 9 15 16 17 18 19
    41 */
    View Code
     1 #include <iostream>//2084 数塔
    2 #include<stdio.h>
    3 #define max(a,b) (((a) > (b)) ? (a) : (b))
    4 using namespace std;
    5 int main()
    6 {
    7 int t,n,i,j,l;
    8 int c[5060],a[5060];
    9 cin>>t;
    10 while(t--)
    11 {
    12 cin>>n;
    13 for (i=1;i<=n*(n+1)/2;i++)
    14 {
    15 cin>>a[i];
    16 }
    17 for(j=n*(n-1)/2+1;j<=n*(n+1)/2;j++)//初始化c[n]
    18 c[j]=a[j];
    19 for (i=n-1;i>0;i--)
    20 {
    21 l=i*(i+1)/2-i*(i-1)/2;//第i行有l个数
    22 for (j=i*(i-1)/2+1;j<=i*(i+1)/2;j++)
    23 {
    24 c[j]=max(c[j+l],c[j+l+1])+a[j];
    25 }
    26 }
    27 printf("%d\n",c[1]);
    28 }
    29 return 0;
    30 }
    31 /*
    32 1 1
    33 2 2 3
    34 3 4 5 6
    35 4 7 8 9 10
    36 5 11 12 13 14
    37 9 15 16 17 18 19
    38 */

    Problem Description

    Problem Description
      在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:

    有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?

    已经告诉你了,这是个DP的题目,你能AC吗?

    Input
      输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。
    Output
      对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。
    Sample Input
      1
    5
    7
    3 8
    8 1 0
    2 7 4 4
    4 5 2 6 5
    Sample Output
      30
  • 相关阅读:
    高精度乘法
    使用BFG清除git仓库中的隐私文件或大文件
    java运行的问题
    eclipse编写的java程序在dos环境下运行的写法
    win32汇编实现阶乘和斐波那契数列
    十个数字不同,实现加减乘。暴力枚举法
    实现一个类模板
    循环队列类模板和函数模板c++实例
    C++析构函数为什么要为虚函数
    1012-Joseph 约瑟夫问题
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2368483.html
Copyright © 2011-2022 走看看