动态规划——数字三角形问题(空间优化)
来源:互联网 发布:mixer sam 软件 编辑:程序博客网 时间:2024/04/30 01:09
/* *问题描述:数字三角形问题(POJ1163) */ /*递推法*/ #include <iostream> #include <algorithm> #define MAX 101 using namespace std; int D[MAX][MAX]; int n; int maxSum[MAX][MAX]; int main() { int i,j; cin>>n; for (i = 1;i<=n;i++) for(j = 1;j<=i;j++) cin>>D[i][j]; for(int i = 1;i<= n;i++) maxSum[n][i] = D[n][i]; for(i = n-1;i>=1;i--) for(j =1; j<=i;j++) maxSum[i][j] = max(maxSum[i+1][j],maxSum[i+1][j+1]) + D[i][j]; cout<<maxSum[1][1] <<endl; return 0; }/* *空间优化:没有必要用二维数组maxSum来存储每一个MaxSum(i,j)的值。 只要从底层一层层向上递推,那么只要一维数组maxSum[100]即可。 即只要存储最后一行的maxSum的值就可以 */ /* *空间优化2:进一步考虑,连maxSum数组都可以不要,直接用D的第n行替代maxSum即可 */ #include <iostream> #include <algorithm> #define MAX 101 using namespace std; int D[MAX][MAX]; int n; int* maxSum; int main() { int i,j; cin>>n; for (i = 1;i<=n;i++) for(j = 1;j<=i;j++) cin>>D[i][j]; maxSum = D[n];//用maxSum指向第n行 for(i = n-1;i>=1;i--) for(j =1; j<=i;j++) maxSum[j] = max(maxSum[j],maxSum[j+1])+D[i][j]; cout<<maxSum[1] <<endl; return 0; }
运行结果:
0 0
- 动态规划——数字三角形问题(空间优化)
- 动态规划—数字三角形问题
- 数字三角形问题(动态规划)
- 动态规划——POJ1163数字三角形问题
- 【动态规划】数字三角形问题
- 动态规划:数字三角形问题
- 动态规划数字三角形问题
- 数字三角形问题[动态规划]
- 数字三角形 ——动态规划基础
- hiho第五周——数字三角形(动态规划)
- 数字三角形(动态规划)
- 数字三角形(动态规划)
- 数字三角形(动态规划)
- 数字三角形(动态规划)
- 动态规划(二)暴力递归的优化之路——数字三角形最大路径和
- 动态规划 问题之数字三角形(正序递推)
- 动态规划 问题之数字三角形(倒序递推)
- 【Algothrim】 动态规划实例 (数字三角形问题)
- hadoop2.5.2学习13-MR之新浪微博TF-IDF算法简介
- 最大熵学习笔记(二)最大熵原理
- LeetCode-405. Convert a Number to Hexadecimal
- Android apk 重新签名
- 如何在虚机VMware上安装TinyCore 64位操作系统
- 动态规划——数字三角形问题(空间优化)
- Linux进程状态
- 释疑のSmartforms点打印无反应
- OpenGL: 渲染管线理论
- Rails安装eventmachine提示出错的解决方法
- Operation System: 关于寄存器和栈
- Visual Studio 2015的破解密钥
- Java多线程学习(吐血超详细总结)
- 设置USB数据监听