TYVJ 1084 数字三角形4 解题报告

  这题的模式需要记住一下,当需要从上下同时得到最优的时候,我记得还有一题NOIP的原题也是这个类型的,题目。。合唱队形也是类似的,两个DP相加。
  这题还是有一点学习和参考的价值,代码:

#include <stdio.h>
#include <stdlib.h>
int f1[27][27], f2[27][27], num[26][26];
#define max(a, b) ((a)>(b)?(a):(b))

int main(int argc, char **argv)
{
	int n;
	int i, j;
	scanf("%d", &n);
	for(i = 1; i <= n; i++){
		for(j = 1; j <= i; j++){
			scanf("%d", &num[i][j]);
		}
	}
	for(i = 1; i <= n; i++){
		for(j = 1; j <= i; j++){
			f1[i][j] = max(f1[i - 1][j], f1[i - 1][j - 1]) + num[i][j];
		}
	}
	for(i = n; i >= 1; i--){
		for(j = 1; j <= i; j++){
			f2[i][j] = max(f2[i + 1][j], f2[i + 1][j + 1]) + num[i][j];
		}
	}
	scanf("%d%d", &i, &j);
	printf("%d\n", f1[i][j] + f2[i][j] - num[i][j]);
	return 0;
}

posted @ 2011-07-08 17:53  zqynux  阅读(246)  评论(0编辑  收藏  举报