poj_1163:The Triangle
来源:互联网 发布:opencv python 安装 编辑:程序博客网 时间:2024/06/07 01:10
准备做DP题,去年省赛学的是搜索和图论,DP题做的实在是少,准备恶补。
题意:给你一个数塔,求最上一层到最下一层(只能向下面左边或右边的数)能得到的最大和。
思路:刚开始不知道什么是DP,就觉得只要找到到第二层的最大值,然后找到第三层最大值就行了,这是我的代码
#include<stdio.h>int p[1010][101];int main(){ int i,j,n,max; while(~scanf("%d",&n)) { for(i=1;i<=n;i++) { for(j=1;j<=i;j++) { scanf("%d",&p[i][j]); } } max = p[1][1]; for(i=2;i<=n;i++) { for(j=1;j<=i;j++) { if(j==1) { if((p[i-1][j] + p[i][j]) > max) max = p[i-1][j] + p[i][j]; p[i][j] = p[i-1][j]+p[i][j]; continue; } if(j==i) { if((p[i-1][j-1] + p[i][j]) > max) max = p[i-1][j-1] + p[i][j]; p[i][j] = p[i-1][j-1]+p[i][j]; continue; } if((p[i-1][j] + p[i][j]) > max) max = p[i-1][j] + p[i][j]; if((p[i-1][j-1] + p[i][j]) > max) max = p[i-1][j-1] + p[i][j]; if((p[i-1][j] + p[i][j]) > (p[i-1][j-1] + p[i][j])) { p[i][j] = p[i-1][j]+p[i][j]; } else { p[i][j] = p[i-1][j-1]+p[i][j]; } } } printf("%d\n",max); }}
高手的代码是从下往上更换:
#include<stdio.h>#define max(a,b) a>b?a:bint dp[1010][101];int main(){ int i,j,n; while(~scanf("%d",&n)) { for(i=1;i<=n;i++) for(j=1;j<=i;j++) scanf("%d",&dp[i][j]); for(i=n-1;i>=1;i--) { for(j=1;j<=i;j++) { dp[i][j] += max(dp[i+1][j],dp[i+1][j+1]); } } printf("%d\n",dp[1][1]); }}
0 0
- poj_1163 The Triangle
- poj_1163 the triangle
- poj_1163:The Triangle
- poj_1163&&SDUT 1730 The Triangle
- poj_1163
- poj_1163
- The Triangle
- The Triangle
- The Triangle
- The Triangle
- The triangle
- The Triangle
- The Triangle
- The Triangle
- The Triangle
- The Triangle
- The Triangle
- The Triangle
- ServletContext,ActionContext,ServletActionContext (关系及联系)
- 常用工具整理
- 第十四周项目3—二叉树排序树中查找的路径
- DateHandler
- 第13周项目3二叉排序树
- poj_1163:The Triangle
- 【C/C++学院】0829-位容器multimapmutisetString/算法函数兰不达表达式以及类重载/GPU编程
- 关于Android service的一些基础知识集合
- 读 《周爱民--大道之简》 笔记
- NSOperation自定义
- SQL Server系列(4) -- T-SQL编程
- 第13周项目1Dijkstra算法的验证
- LintCode_第k大元素
- 基于GigE_Vision协议接收相机发送的数据包显示的图像中出现固定位置黑线的解决