题目:
见上一篇文章 数字三角形最大和(一)
思路:
二维数组存放三角形,从最底层向上递推。
| 3 | ||
|---|---|---|
| 2 | 4 | |
| 1 | 3 | 6 |
l2 r1 等于下一行与他计算结果的较大值,同理
| 3->13 | ||
|---|---|---|
| 2->5 | 4->10 | |
| 1 | 3 | 6 |
- 代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 101
int d[MAX][MAX];
int n;
int MaxSum()
{
for(int i=n-1;i>=1;i--){
for(int j=1;j<=i;j++)
d[i][j] = max(d[i+1][j],d[i+1][j+1]) + d[i][j];
}
}
int main()
{
cin >> n;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++)
cin >> d[i][j];
}
MaxSum();
cout << d[1][1];
return 0;
}
为了节省空间,我把结果直接就存在 d[ ][ ] 数组里了,反正留着原数也没啥用。
该博客介绍了如何使用动态规划和递推循环解决数字三角形的最大和问题。作者从最底层开始,通过比较下一行元素与当前元素的较大值进行递推计算,最终得出最大和。代码实现中,为了节省空间,结果直接存储在二维数组d[][]中。
2817

被折叠的 条评论
为什么被折叠?



