作为动态规划的经典入门题目,就是这道题啦。
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1)
Input
Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100.
The numbers in the triangle, all integers, are between 0 and 99.
Output
Your program is to write to standard output. The highest sum is written as an integer.
Sample Input
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
Sample Output
30
Hint
嗯,这道题的思路就非常简单了,给出关键的递推公式吧:
getmax[i][j]=max(getmax[i+1][j],getmax[i+1][j+1])+graph[i][j]。(从数字金字塔的底部向上递推)
下面是AC代码
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=100;
int graph[maxn][maxn];
int getmax[maxn][maxn];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
scanf("%d",&graph[i][j]);
}
}
for(int i=0;i<n;i++)
{
getmax[n-1][i]=graph[n-1][i];
}
for(int i=n-2;i>=0;i--)
{
for(int j=0;j<=i;j++)
{
getmax[i][j]=max(getmax[i+1][j],getmax[i+1][j+1])+graph[i][j];
}
}
printf("%d\n",getmax[0][0]);
return 0;
}