数字金字塔

简单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; }
posted @ 2015-04-14 19:33  王皓月|r  阅读(252)  评论(0)    收藏  举报