vj链接
题意:给出如下的数塔,从顶层走到底层,求走过的结点之和最大值。
思路很简单,从底层向上走,则每一个节点都能够确定从最底层走到该点能够达到的最大数字和。走到最顶层,一定是得到所有节点的状态之后,能够确定的最大数字和。我认为dp就是找到一种易于实现规律,将所有的状态都走过之后才能得到正确的结论。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int f[110][110];
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
memset(f,0,sizeof(f));
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
scanf("%d",&f[i][j]);
for(int i=n-1;i>=1;i--){
for(int j=1;j<=i;j++)
f[i][j]+=max(f[i+1][j],f[i+1][j+1]);
}
printf("%d\n",f[1][1]);
}
return 0;
}