HDOJ 2084 数塔-简单DP
2016-04-06 20:43
225 查看
简单的经典DP数塔 给你类似下面的塔型数组,让你选一条路径使路上的节点数之和最大;
从下往上面分析,在倒数第二排可以见,每个数下面只接了两个数,也就是说要往上面走到2,必须从下面两条路选,则选择最大的那个值,以此类推往上走,使最上面的值最大;
转移方程 F[i][j]=max{F[i+1][j],F[i+1][j+1]}+F[i][j];
从下往上面分析,在倒数第二排可以见,每个数下面只接了两个数,也就是说要往上面走到2,必须从下面两条路选,则选择最大的那个值,以此类推往上走,使最上面的值最大;
转移方程 F[i][j]=max{F[i+1][j],F[i+1][j+1]}+F[i][j];
#include<stdio.h> #include<string.h> int main() { int T,n,i,j; //F[i][j]=max{F[i+1][j],F[i+1][j+1]}+F[i][j]; int num[200][200]; scanf("%d",&T); while(T--) { memset(num,0,sizeof(num)); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=i;j++) { scanf("%d",&num[i][j]); } } for(i=n;i>=1;i--) { for(j=1;j<=i;j++) { if(num[i+1][j]>num[i+1][j+1]) num[i][j]=num[i+1][j]+num[i][j]; else num[i][j]=num[i+1][j+1]+num[i][j]; } } printf("%d\n",num[1][1]); } return 0; }
相关文章推荐
- git如何提交代码
- 解决外边距折叠问题
- 寄存器与内存的区别
- 关于程序猿的一点看法
- 明天上午安排的两两进行30道题目的默写
- C语言中的strlen与sizeof的区别
- Calling View methods on another thread than the UI thread.错误
- (每日一问)互联网行业是如何盈利的?
- HTTP状态码
- 杭电1200
- HD 1253 胜利大逃亡(bfs)
- CodeForces-659C-Tanya and Toys
- 《论文排版札记》part 2 作者简介、基金号、横线设置
- 你们都满足下面的工作考核吗
- 学习进度表
- QT中的布局类
- IOS程序开发概览
- Spring MVC 响应乱码
- 实现一个简单的数学计算题
- LinearLayout布局笔记