TYVJ 1123 道路游戏 解题报告

  转解题报告:http://hi.baidu.com/1996102129/blog/item/6e6fcd50853bb814367abec1.html/cmtid/a69829e65dc5e920b93820fd

  我觉得这题的难点是彻底读懂题目,确实难读懂。实话。
  我的代码如下:

#include <stdio.h>
#include <stdlib.h>
#define max(a, b) ((a)>(b)?(a):(b))
int coin[1001][1001], sum[1001][1001];
int cost[1001], f[1001];

int main(int argc, char **argv)
{
	int i, j, k;
	int m, n, p;
	int t;
	scanf("%d%d%d", &n, &m, &p);
	for(i = 1; i <= n; i++){
		for(j = 1; j <= m; j++){
			scanf("%d", &coin[i][j]);
		}
	}
	for(i = 1; i <= n; i++){
		scanf("%d", &cost[i]);
	}
	for(i = 1; i <= n; i++){
		for(j = 1; j <= m; j++){
			sum[i][j] = sum[i][j - 1] + coin[((i + j - 2) % n) + 1][j];
		}
	}
	for(i = 1; i <= m; i++){
		for(k = 1; k <= n; k++){
			for(j = max(1, i - p + 1); j <= i; j++){
				t = f[j - 1] + sum[k][i] - sum[k][j - 1] - cost[((k + j - 2) % n) + 1];
				if(f[i] < t){
					f[i] = t;
				}
			}
		}
	}
	printf("%d\n", f[m]);
	return 0;
}

  

posted @ 2011-08-24 14:08  zqynux  阅读(377)  评论(0编辑  收藏  举报