zoukankan      html  css  js  c++  java
  • hdu2084(dp)

    数塔

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 21741    Accepted Submission(s): 13099


    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
    状态转移方程:dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j];
     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<string.h>
     4 using namespace std;
     5 int dp[100][100],a[100][100];
     6 int main()
     7 {
     8     int t,i,j,n;
     9     scanf("%d",&t);
    10     while(t--)
    11     {
    12         scanf("%d",&n);
    13         memset(dp,0,sizeof(dp));
    14         for(i=1; i<=n; i++)
    15             for(j=1; j<=i; j++)
    16             {
    17                 scanf("%d",&a[i][j]);
    18                 dp[i][j]=a[i][j];
    19             }
    20         for(i=2; i<=n; i++)
    21             for(j=1; j<=i; j++)
    22             {
    23                 dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j];
    24             }
    25         int max=0;
    26         for(i=1; i<=n; i++)
    27             if(dp[n][i]>max)
    28                 max=dp[n][i];
    29         printf("%d
    ",max);
    30     }
    31     return 0;
    32 }
    View Code
  • 相关阅读:
    Linux就该这么学(第一天)
    在虚拟机中使用Git
    Myeclipse的一些快捷键整理(转)
    SpringMVC框架应用
    动态网页开发基础
    jsp数据交互(二)
    jsp数据交互(一)
    复习数据结构(基于大话数据结构)
    IO及NIO的总结
    学习正则表达式笔记
  • 原文地址:https://www.cnblogs.com/lxm940130740/p/3904819.html
Copyright © 2011-2022 走看看