#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int max(int a,int b){
if(a>b)
return a;
return b;
}
int nums[105][105];
int pathsize[105][105];
int main(){
int col;
int i,j;
scanf("%d",&col);
for(i=0;i<col;i++){
for(j=0;j<col;j++){
if(i>=j){
scanf("%d",&nums[i][j]);
}
}
}
int index;
for(index=0;index<col;index++){
pathsize[col-1][index]=nums[col-1][index];
}
if(col==1)
return nums[0][0];
for(i=col-2;i>=0;i--){//行
for(j=0;j<=i;j++){//列
int m=max(pathsize[i+1][j],pathsize[i+1][j+1]);
pathsize[i][j]=m+nums[i][j];
}
}
printf("%d\n",pathsize[0][0]);
return 0;
}
典型的动态规划问题