TYVJ 1079 数字三角形3 解题报告
一定要经过n / 2, n / 2,就是说从上面到n / 2这一行都只能取最右边的一个,然后下面的部分DP就行了。
代码:
#include <stdio.h> #include <stdlib.h> int num[25][25]; int f[26][25]; #define max(i, j) ((i)>(j)?(i):(j)) int main(int argc, char **argv) { int i, j; int n, ans = 0; scanf("%d", &n); for(i = 0; i < n; i++){ for(j = 0; j <= i; j++){ scanf("%d", &num[i][j]); } } for(i = n - 1; i >= 0; i--){ for(j = 0; j <= i; j++){ f[i][j] = num[i][j] + max(f[i + 1][j], f[i + 1][j + 1]); } } for(i = 0; i < n / 2 - 1; i++){ ans += num[i][i]; } printf("%d\n", f[n / 2 - 1][n / 2 - 1] + ans); return 0; }