作爲動態規劃的經典入門題目,就是這道題啦。
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1)
Input
Output
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;
}