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;
}

posted @ 2011-07-08 15:33  zqynux  阅读(352)  评论(0编辑  收藏  举报