NO. 1163 The Triangle

很简单的一条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]);
 

}

 

你可能感兴趣的:(RIA)