51nod 数塔取数问题 基础dp
2017-08-13 15:58
274 查看
1002 数塔取数问题
一个高度为N的由正整数组成的三角形,从上走到下,求经过的数字和的最大值。每次只能走到下一层相邻的数上,例如从第3层的6向下走,只能走到第4层的2或9上。
5
8 4
3 6 9
7 2 9 5
例子中的最优方案是:5 + 8 + 6 + 9 = 28
Input
第1行:N,N为数塔的高度。(2 <= N <= 500)
第2 - N + 1行:每行包括1层数塔的数字,第2行1个数,第3行2个数……第k+1行k个数。数与数之间用空格分隔(0 <= A[i] <= 10^5) 。
Output
输出最大值
Input示例
4
5
8 4
3 6 9
7 2 9 5
Output示例
28
题解:
状态转移方程 dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+a[i][j];
代码:
#include <iostream> using namespace std; typedef long long LL; const int maxn = 500+5; int dp[maxn][maxn]; int main() { int N; cin>>N; LL a[maxn][maxn]; for(int i=0;i<N;i++) { for(int j=0;j<i+1;j++) { cin>>a[i][j]; if(i==N-1){ dp[i][j]=a[i][j]; } } } for(int i=N-2;i>=0;i--) for(int j=0;j<i+1;j++) { dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+a[i][j]; } cout<<dp[0][0]<<endl; return 0; }
相关文章推荐
- 51nod 1083 矩阵取数问题(基础dp)
- 51nod 1002 数塔取数问题(基础dp)
- 51nod-正整数分组问题(基础方程DP-01背包)
- 51nod-正整数分组问题(基础方程DP-01背包)
- 【dp基础课程】矩阵取数问题+最大子段和+最长公共子序列(LCS)【51nod】
- 51Nod 1083 矩阵取数问题(矩阵取数dp,基础题)
- 51Nod 1083 矩阵取数问题(基础DP)
- 51nod 1597 有限背包计数问题[dp][阈值]
- 51Nod-1083 矩阵取数问题【DP】
- 51nod 1049 最大子段和(基础dp)
- 51nod 1051 最大子矩阵和(基础dp)
- 51NOD 最大子字段和问题(DP入门)
- 51Nod-石子归并问题(DP解法)
- 51nod 1006 最长公共子序列Lcs(基础dp)
- [DP] 51Nod 1597 有限背包计数问题
- 51nod 1101 找零问题 dp (01背包问题)
- 石子合并问题(一) (基础的区间dp)
- 51nod 1086 背包问题V2 (巧妙dp,二进制)
- DP基础问题若干(ACM/ICPC) 来自http://blog.csdn.net/accry/article/details/6607593
- DP基础问题若干(ACM/ICPC)