TYVJ 1123 道路游戏 解题报告
我觉得这题的难点是彻底读懂题目,确实难读懂。实话。
我的代码如下:
#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; }