动态规划——数字三角形问题(空间优化)
2017-02-28 10:53
337 查看
/* *问题描述:数字三角形问题(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 [i] = D [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 ;//用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; }
运行结果:
相关文章推荐
- 动态规划初步-01背包问题&&一维数组(空间复杂度优化)
- 动态规划入门-数字三角形(从朴素递归到各种优化)
- 找零钱问题中动态优化的空间复杂度优化
- 多独立任务执行的最小空间动态规划问题
- 从子集和问题的动态规划解看判断问题与优化问题的区别与联系
- 动态规划-优化编辑器问题
- 动态规划----优化编辑器问题
- 动态规划_矩阵连乘的空间复杂度优化
- 类斐波那契问题中动态规划的时间复杂度优化
- 算法竞赛宝典 动态规划 货币系统问题(完全背包+一维优化)
- 动态规划:HDU1059-Dividing(多重背包问题的二进制优化)
- 0/1背包问题动态规划 空间复杂度是o(C)
- 动态规划7:砝码和种类优化成01背包问题
- ACM;邮局问题;动态规划;O(n3); 四边形法则可以优化,暂时没研究,等待添加;
- 浅谈SEO之动态URL问题与优化
- 利用动态规划求迷宫的最优值问题
- 动态规划——背包问题变形 收藏
- 0-1背包问题的动态规划解法
- 动态规划——0/1背包问题
- delphi中为动态数组分配空间的问题