请问这道数字三角形如何理解呢?有四段代码,我不是很懂,希望大家帮注释一下代码并讲一下思路。非常感谢!
#include<iostream>
#include<cstdio>
usning namespace std;
#define MAX_NUM 100
int d[MAX_NUM + 10][MAX_NUM + 10];
int N;
int MaxSum(int r, int j)
{
if (r == N)
return d[r][j]
int sum1 = MaxSun(r + 1, j);
int sum2 = MaxSum(r + 1, j + 1);
if (sum1 > sum2)
return sum1 + d[r][j]
return sum2 + d[r][j];
}
int main()
{
int m;
scanf("%d", &N);
for (int i = 1;i <= N;i++)
for (int j = 1;j <= i;i++)
scanf("%d", &d[i][j]);
printf("%d", MaxSum(1, 1));
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX_NUM 100
int d[MAX_NUM + 10][MAX_NUM + 10];
int N;
int maxSum[MAX_NUM + 10][MAX_NUM + 10];
int MaxSum(int r, int j)
{
if (r == N)
return d[r][j];
if (maxSum[r + 1][j] == -1)
maxSum[r + 1][j] = MaxSum(r + 1, j);
if (maxSum[r + 1][j + 1] == -1)
maxSum[r + 1][j + 1] = MaxSum(r + 1, j + 1);
if (maxSum[r + 1][j] > maxSum[r + 1][j + 1])
return maxSum[r + 1][j] + d[r][j];
}
int main()
{
int m;
scanf("%d", &N);
memset(maxSum, -1, sizeof(maxSum));
for (int i = 1;i <= N;i++)
for (int j = 1;j <= i;j++)
scanf("%d", &d[i][j]);
printf("%d", MaxSum(1, 1))l
return 0;
}
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define MAX_NUM 100
int d[MAX_NUM + 10][MAX_NUM + 10];
int N;
int maxSum[MAX_NUM + 10][MAX_NUM + 10];
int main()
{
int i, j;
scanf("%d", &N);
for (i = 1, i <= N;i++)
for (j = 1;j <= i;j++)
scanf("%d", &d[i][j]);
for (j = 1;j <= N;j++)
maxSum[N][j] = d[N][j];
for (i = N;i > 1;i--)
for (j = 1;j < i;j++) {
if (maxSum[i][j] > maxSum[i][j + 1])
maxSum[i - 1][j] = maxSum[i][j] + d[i - 1][j];
else
maxSum[i - 1][j] = maxSun[i][j + 1] + d[i - 1][j];
}
printf("%d", maxSum[1][1]);
return 0;
}
#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 (j = 1;j <= i;j++)
cin >> D[i][j];
maxSum = D[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;
}