经典的DP问题,要保存中间状态,不然会超时。。。
AC代码:
#include<stdio.h>
int a[105][105],f[105][105];
inline int max(int x,int y) { return x<y?y:x;}
/*int f(int i,int j){
if(i==n) return a[i][j];
else return a[i][j]+max(f(i+1,j),f(i+1,j+1));
}*/
int main()
{
int c,i,j,n;
scanf("%d",&c);
while(c--){
scanf("%d",&n);
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
scanf("%d",&a[i][j]);
}
}
for(j=1;j<=n;j++) f[n][j]=a[n][j];
for(i=n-1;i>=1;i--)
for(j=1;j<=i;j++)
f[i][j]=a[i][j]+max(f[i+1][j],f[i+1][j+1]);
printf("%d\n",f[1][1]);
}
return 0;
}