我觉得这题的难点是彻底读懂题目,确实难读懂。实话。
我的代码如下:
#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;
}