#include <stdio.h>
int main(){
int n;
int a[20][3],c[20][20],c1[20][20],max1,max2;
int i,j,num=0;
scanf("%d",&n);
while(1){
scanf("%d%d%d",&a[num][0],&a[num][1],&a[num][2]);
if(!a[num][0] && !a[num][1] && !a[num][2])
break;
num++;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
c[i][j]=0;
for(i=0;i<num;i++)
c[a[i][0]-1][a[i][1]-1]=a[i][2];
for(i=n-1;i>=0;i--){
for(j=n-1;j>=0;j--){
if(i==n-1 && j==n-1){
max1=c[n-1][n-1];
c[i][j]=0;
} else if(i==n-1){
c[i][j]=c[i][j]+c[i][j+1];
if(c[i][j]>max1){
max1=c[i][j];
c1[i][j]=0;
}
} else if(j==n-1){
c[i][j]=c[i][j]+c[i+1][j];
if(c[i][j]>max1){
max1=c[i][j];
c1[i][j]=0;
}
} else{
if(c[i][j]+c[i+1][j]>=c[i][j]+c[i][j+1])
c[i][j]=c[i][j]+c[i+1][j];
else
c[i][j]=c[i][j]+c[i][j+1];
if(c[i][j]>max1){
max1=c[i][j];
c1[i][j]=0;;
}
}
}
}
for(i=n-1;i>=0;i--){
for(j=n-1;j>=0;j--){
if(i==n-1 && j==n-1){
max2=c1[n-1][n-1];
} else if(i==n-1){
c1[i][j]=c1[i][j]+c1[i][j+1];
if(c1[i][j]>max2)
max2=c1[i][j];
} else if(j==n-1){
c1[i][j]=c1[i][j]+c1[i+1][j];
if(c1[i][j]>max2)
max2=c1[i][j];
} else{
if(c1[i][j]+c1[i+1][j]>=c1[i][j]+c1[i][j+1])
c1[i][j]=c1[i][j]+c1[i+1][j];
else
c1[i][j]=c1[i][j]+c1[i][j+1];
if(c1[i][j]>max2)
max2=c1[i][j];
}
}
}
printf("%d\n",max1+max2);
return 0;
}
刚开始学编程的菜鸟一枚,就纯招规律来写的,然后为啥我这样写结果出来的是23,我照着数据数据画了一个数组出来,结果只找到了20和3,还有18和5两种方式。所以,弱弱地问一句,输出数据的25到底是怎么来的啊?