很简单的一条DP,但是在空间利用上有欠缺,memory用了200多K,看到PKU上面有人用了0 K,哇塞,要再研究一下~~
第i行第j列为triangle[(i*i-i)/2+j-1](三角形顶端为第1行)
第i行东东的左"child"为 x+i, 右"child"为 x+i+1
#include<iostream.h>
#include<stdio.h>
int Max(int a,int b){
return a>b?a:b;
}
void main(){
int N=0,i,j;
int triangle[5060];
int record[5060];
scanf("%d",&N);
for(i=1;i<=N;i++)
for(j=1;j<=i;j++)
scanf("%d",&triangle[(i*i-i)/2+j-1]);
for(i=1;i<=N;i++)
record[(N*N-N)/2+i-1]=triangle[(N*N-N)/2+i-1];
for(i=N-1;i>=1;i--)
for(j=1;j<=i;j++)
record[(i*i-i)/2+j-1]=Max(record[(i*i-i)/2+j+i-1],record[(i*i-i)/2+j+i])+triangle[(i*i-i)/2+j-1]; //和1157是同样的解法
printf("%d",record[0]);
}