HDU 2084 数塔-dp-(数塔)
2015-07-17 13:55
246 查看
题意:数字排成三角形,求从顶点加到底,最大的和是多少。每个点只能加跟它直接相连的其中一个
分析:
数塔是经典的dp模型,从底往上推,每次找最大的往上一层加,最后归总到顶点,结果就是顶点的值。
dp[i][j]:加到dp[i][j]第i行第j个数时的最大和;dp[i][j]=dp[i][j]+max(dp[i+1][j],dp[i+1][j+1])
代码:
分析:
数塔是经典的dp模型,从底往上推,每次找最大的往上一层加,最后归总到顶点,结果就是顶点的值。
dp[i][j]:加到dp[i][j]第i行第j个数时的最大和;dp[i][j]=dp[i][j]+max(dp[i+1][j],dp[i+1][j+1])
代码:
#include<iostream> #define max(a,b) a>b?a:b; using namespace std; int main() { int t,n; int a[10000],dp[110][110]; cin>>t; while(t--){ cin>>n; int m=n*(n+1)/2; for(int i=1;i<=m;i++) cin>>a[i]; dp[1][1]=a[1]; for(int i=2;i<=n;i++) for(int j=1;j<=i;j++) dp[i][j]=a[(i-1)*i/2+j]; for(int i=n-1;i>=1;i--){ for(int j=1;j<=i;j++){ dp[i][j]+=max(dp[i+1][j+1],dp[i+1][j]); } } cout<<dp[1][1]<<endl; } }
相关文章推荐
- Java编程,String[]转换List
- linux 多线程那点事
- 【Android学习】实现卡片式ListView
- java web 文件上传处理
- mysql 远程连接设置
- 尝试制作在A20上(CB2)自己的Linux系统
- android:drawable的一些总结
- CentOS 6.6配置安装(Apache+PHP5+MySQL)LAMP服务器
- 内存溢出的解决思路
- 出乎意料的else语句
- Linux定时器
- 对于节点值会变化的元素判断
- [leetcode] Next Permutation
- 重现二叉树非递归算法的构建过程
- 简单的镜头跟随
- 大圣画廊v0.2(2015.7.17)
- 用戶組TCODE
- GRE写作必备句型
- vim在同一个窗口中同时编辑多个文件
- quick-cocos2d-x 脚本和资源加密