算法设计与分析:第四章 动态规划 4.1数塔问题
2015-08-05 09:51
274 查看
/* 有形如右图的一个数塔,从顶部 出发,在每一结点可以选择向左 走或是向右走,一直走到底层, 要求找出一条路径,使路径上的 数值和最大 。 思想: 动态规划: 1 设d[i][j]:表示从i,j出发得到的最大数值和 2 状态迁移方程:d[i][j] = max(d[i+1][j],d[i+1][j+1]) + a[i][j] 3 边界:d [j] = a [j] 4 所求状态:d[1][1] 输入: 5 9 12 15 10 6 8 2 18 9 5 19 7 10 4 16 输出: 59 */ #include <stdio.h> #include <string.h> const int MAXSIZE = 100; int max(int a,int b) { return a > b ? a : b; } int numberTower(int iArr[MAXSIZE][MAXSIZE],int n) { int iDP[MAXSIZE][MAXSIZE]; //初始化动态规划数组 for(int j = 1 ; j <= n ; j++) { iDP [j] = iArr [j]; } //从下向上,状态迁移 for(int i = n - 1; i >= 1 ; i--) { for(int j = 1 ; j <= i ; j++) { iDP[i][j] = max(iDP[i+1][j],iDP[i+1][j+1]) + iArr[i][j]; } } return iDP[1][1]; } void process() { int iArr[MAXSIZE][MAXSIZE]; int n; while(EOF != scanf("%d",&n)) { for(int i = 1 ; i <= n ; i++) { for(int j = 1 ; j <= i ; j++) { scanf("%d",&iArr[i][j]); } } printf("%d\n",numberTower(iArr,n)); } } int main(int argc,char* argv[]) { process(); getchar(); return 0; }
相关文章推荐
- 【转】C++函数参数中的省略号用法分析
- POJ 1564--Sum It Up【DFS】
- 反病毒工具-火绒剑
- RGB中的颜色的设置
- 进度条插件
- ArrayList中重复元素处理方法.[Java]
- leetcode:求最后一个单词长度
- ios webview cookie存储地点
- sql 获取id是偶数或者是奇数的数据方法
- 算法设计与分析:第三章 分治 3.7线性时间选择
- 算法设计与分析:第三章 分治 3.6棋盘覆盖
- 算法设计与分析:第三章 分治 3.5Strassen矩阵乘法
- Silverlight 2 (beta1)数据操作(2)——使用ASP.NET Web Service进行数据CRUD操作(下)
- [转]在linux下如何判断是否已经安装某个软件?软件安装在哪个目录
- C语言冒泡排序实现
- http get post传参
- HDU--5344--2015 Multi-University Training Contest 5--MZL's xor
- 一个可以下载所有操作系统的网站
- 算法设计与分析:第三章 分治 3.3二进制大整数的乘法
- 算法设计与分析:第三章 分治 3.4多项式乘积的分治方法