题目:
见上一篇文章 数字三角形最大和(一)
思路:
二维数组存放三角形,从最底层向上递推。
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[ ][ ] 数组里了,反正留着原数也没啥用。