dp:数字三角形问题
2017-10-30 20:31
211 查看
/* 问题描述:给定一个由n行数字组成的数字三角形,如下图所示 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 如上图最大值为30=7+3+8+7+5 */ #include <iostream> #include <stdio.h> using namespace std; int main() { int a[20][20],dp[20][20],i,j,n;//a[][]用于输入三角形,dp[][]表示动态规划的二位数字,每一次循环利用上一次循环剩下的值 cin>>n;//输入行数 for(i=0;i<n;i++)//输入三角形 for(j=0;j<=i;j++) cin>>a[i][j]; for(i=0;i<n;i++)//初始化操作,让dp[][]最下面一层等于a[][]最下面一层 dp[n-1][i]=a[n-1][i]; for(i=n-2;i>=0;i--)//核心代码,从倒数第二层开始,每一层从左到右遍历,新值就是下面两个中最大的那一个加上自身 for(j=0;j<=i;j++) dp[i][j]=a[i][j]+(dp[i+1][j]>dp[i+1][j+1]?dp[i+1][j]:dp[i+1][j+1]); for(i=0;i<n;i++)//输出a[][] for(j=0;j<=i;j++) { cout<<a[i][j]<<" "; if(j==i) cout<<endl; } for(i=0;i<n;i++)//输出dp[][] for(j=0;j<=i;j++) { printf("%-3d ",dp[i][j]); if(j==i) cout<<endl; } cout<<"最大值为"<<dp[0][0]<<endl; return 0; }
相关文章推荐
- 2015寒假集训--dp--数字三角形问题
- POJ_1163_数字三角形问题(DP)
- DP经典应用(一)数字三角形问题
- DP 数字三角形+找钱问题
- DP_数字三角形问题
- sdut1730 数字三角形问题(dp入门题)
- 数字三角形问题(DP)
- 【dp】数字三角形问题
- POJ 1163 数字三角形问题(DP)
- 数字三角形问题
- 数字三角形 (简单DP)
- hrbust 1817 数字添加号问题【dp】
- 动态规划_数字三角形问题
- 三角形数字问题
- NUC1041 数字三角形【DP】
- OpenJudge_P7625 三角形最佳路径问题(DP)
- HihoCoder - 1037 数字三角形 基础dp、朴素dp
- 数字三角形问题
- 三角形数字路径最大值问题
- 数字三角形问题