程序设计与算法(二)算法基础-郭炜 6.2.1 数字三角形(2)
作者:互联网
递归转成递推
7 | ||||
3 | 8 | |||
8 | 1 | 0 | ||
2 | 7 | 4 | 4 | |
4 | 5 | 2 | 6 | 5 |
30 | ||||
23 | 21 | |||
20 | 13 | 10 | ||
7 | 12 | 10 | 10 | |
4 | 5 | 2 | 6 | 5 |
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 101
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(int i = n - 1;i >= 1;i--)
{
for(int 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;
}
空间优化
4 | 5 | 2 | 6 | 5 |
#include <iostream>
#include<algorithm>
using namespace std;
#define MAX 101
int D[MAX][MAX];
int n;
int * maxSum;
int main()
{
int i,j;
cin >> n;
for(i = 1;i <= n;i++)
{
for(int j = 1;j <= i;j++)
{
cin >> D[i][j];
}
}
maxSum = D[n];//maxSum指向第n行
for(int i = n - 1;i >= 1;i--)
{
for(int j = 1;j <= i;j++)
{
maxSum[j] = max(maxSum[j],maxSum[j + 1]) + D[i][j];
}
}
cout << maxSum[1] << endl;
}
标签:int,MAX,路径,cin,算法,6.2,郭炜,include,maxSum 来源: https://blog.csdn.net/sinat_38398595/article/details/115250955