http://acm.pku.edu.cn/JudgeOnline/problem?id=1163
#include<stdio.h>
#include<string.h>
long int sum[101][101],a[101][101];
#define max(x,y) x>y?x:y
int main()
{
long int t,max;
int i,j,n;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
scanf("%ld",&a[i][j]);
}
memset(sum,0,sizeof(sum));
//sum[i][j]表示累加到a[i][j]这个位置时取得的最大值
sum[0][0]=a[0][0];
for(i=1;i<n;i++)
{
sum[i][0]=sum[i-1][0]+a[i][0]; //特殊处理第一列的元素
}
for(i=1;i<n;i++)
{
for(j=1;j<=i;j++)
{
if(j==i)sum[i][j]=sum[i-1][j-1]+a[i][j];//特殊处理对角线上面的元素
t=max(sum[i-1][j-1]+a[i][j],sum[i-1][j]+a[i][j]);
sum[i][j]=max(t,sum[i][j]);
}
}
max=0;
for(i=0;i<n;i++)
{
if(max<sum[n-1][i])
max=sum[n-1][i];
// printf("%d ",sum[n-1][i]);
}
printf("%ld/n",max);
}
return 0;
}