数塔问题
来源:互联网 发布:通快激光编程软件 编辑:程序博客网 时间:2024/06/15 15:03
/*Name: 数塔问题 Copyright: freeAuthor: 巧若拙 Date: 24-07-17 09:55Description: 数塔问题 :要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?1311 812 7 266 14 15 812 7 13 24 11算法思路:典型的动态规划,可以从上往下走,但是最终需要遍历最底层,找出最大值。更巧妙的方法是从右下角斜向上走,最终到达顶点,刚好得到答案。还可以利用上下层之间数值的关系,得到路径。 */#include<iostream>#include<cstdio>using namespace std;const int MAX = 100; int map[MAX][MAX];int DP(int n);void PrintPath(int n);int main() {int n;cin >> n;for (int i=0; i<n; i++){for (int j=0; j<=i; j++){cin >> map[i][j];}}cout << DP(n) << endl;PrintPath(n); return 0;}int DP(int n) {for (int i=n-2; i>=0; i--) //从右下角斜向上走,最终到达顶点,刚好得到答案{for (int j=i; j>=0; j--) {map[i][j] += max(map[i+1][j], map[i+1][j+1]);}}return map[0][0];}void PrintPath(int n){int i = 0, j = 0;for (int k=1; k<n; k++) //输出前n-1行 {if (map[i+1][j] > map[i+1][j+1]) //向正下方走{cout << map[i][j] - map[i+1][j] << "->";i++;} else //向右下方走{cout << map[i][j] - map[i+1][j+1] << "->";i++;j++;} }//输出底层元素 cout << map[i][j] << endl;}
阅读全文
0 0
- 数塔问题
- 数塔问题
- hdu2084数塔问题
- 数塔问题...
- NOJ1079 数塔问题
- NOJ1079 数塔问题
- HDOJ2084数塔问题
- Pascal数塔问题
- 数塔问题
- 数塔问题
- poj1163 数塔问题
- 数塔问题
- 数塔问题
- dp数塔问题
- 数塔问题
- 数塔问题
- 数塔问题
- 数塔问题
- hdu 2197 本原串 思维
- 读Zepto源码之Callbacks模块
- Android开发——去掉系统自带标题栏的几种方式
- Jetty9架构解析-安装和启动
- new创建对象和直接定义的区别
- 数塔问题
- 使用plsql工具登录后点击Tables发现没有表的解决方案
- sort
- Java Beans
- Android studio Xml 中部分资源文件不提示
- 网路游戏之物理模拟
- 二叉树的遍历
- AbstractVoiceActivityDetector
- Qt中读写文件的内容-------QFile