简单DP问题 dp[j] = max(olddp[j], olddp[j-1]) + n(当前数字)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#define MAXR 1000
int
max(int a, int b)
{
return a > b ? a : b;
}
int
main(main)
{
int best[MAXR], oldbest[MAXR];
int i, j, r, n, m;
while(scanf( "%d", &r)!=EOF){
for(i=0; i<MAXR; i++)
best[i] = 0;
for(i=1; i<=r; i++) {
memmove(oldbest, best, sizeof oldbest);
for(j=0; j<i; j++) {
scanf("%d", &n);
if(j == 0)
best[j] = oldbest[j] + n;
else
best[j] = max(oldbest[j], oldbest[j-1]) + n;
}
}
m = 0;
for(i=0; i<r; i++)
if(best[i] > m)
m = best[i];
printf("%d\n", m);
}
return 0;
}