数字三角形升级版(棋盘型动态规划)
2016-11-09 08:13
232 查看
数字三角形升级版
题目描述:从数字三角形的顶部(如图,第一行的5表示行数)到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,且你有一次机会可以把任何一个数重复加一遍。
和最大的路径称为最佳路径。你的任务就是求出最佳路径上的数字之和。
输入描述:
第一行:一个数,表示行数。
接下来n行为数塔
输出描述:
一个数即最优结果
样例输入:
5
1
1 3
1 1 3
1 1 1 3
7 1 1 1 3
样例输出:
18
数据范围及提示:
三角形行数不大于1000。最大和不大于maxlongint
思路:
加一维表示这条路径上是否已经取数,用0和1表示。
#include<iostream> #include<cstdio> using namespace std; const int maxn=1010; int n,a[maxn][maxn],f[maxn][maxn][2]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) { scanf("%d",&a[i][j]); f[i][j][0]=a[i][j]; f[i][j][1]=a[i][j]<<1; } for(int i=n-1;i>=1;i--) for(int j=1;j<=i;j++) { f[i][j][0]=a[i][j]+max(f[i+1][j][0],f[i+1][j+1][0]); f[i][j][1]=a[i][j]+max(f[i+1][j][1],f[i+1][j+1][1]); f[i][j][1]=max(f[i][j][1],f[i][j][0]+a[i][j]); } printf("%d",f[1][1][1]); return 0; }
相关文章推荐
- 棋盘型动态规划 之 CODE[VS] 1220 数字三角形
- 【动态规划】数字三角形4
- 【转】数字三角形-递推-动态规划
- 动态规划——数字三角形最大和
- 动态规划学习(1)-数字三角形问题
- 数字三角形_递归_递推(动态规划)
- 动态规划-数字三角形
- 动态规划解决数字塔-数字三角形问题
- poj1163 数字三角形 (动态规划)
- POJ1163 The Triangle(数字三角形) (动态规划初步)
- 动态规划--数字三角形
- 动态规划--再论(数字三角形 poj1163)
- 数字三角形(动态规划)
- (动态规划)数字三角形问题
- 数字三角形 动态规划
- Codevs 4829 [DP]数字三角形升级版
- 动态规划 问题之数字三角形(倒序递推)
- POJ 1163 求数字三角形由顶到底边的最大数字和 动态规划
- 动态规划__数字三角形
- 数字三角形--动态规划