本文主要是介绍hdu2084数塔(简单dp),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://acm.hdu.edu.cn/showproblem.php?pid=2084 |
数塔Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 57124 Accepted Submission(s): 33581 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:
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,从上到下。
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;int dp[105][105];int main()
{int c;cin>>c;int n;while(c--){memset(dp,0,sizeof(dp));cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++)cin>>dp[i][j];}for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j]);//cout<<"dp["<<i<<"]["<<j<<"]="<<dp[i][j]<<endl;}}int sum=dp[n][1];for(int i=2;i<=n;i++)sum=max(sum,dp[n][i]);cout<<sum<<endl;}return 0;
}
这篇关于hdu2084数塔(简单dp)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!