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;
}
浙公网安备 33010602011771号