#include <stdio.h> int n; int h; int fi[30]; int di[30]; int cfi[30]; int ti[30]; struct LAKENODE { int num[30]; int max; }lake[30]; int GetMax(int p[], int i, int j) { int cmax = p[i], loc = i; for (int m = i + 1; m <= j; m++) { if (cmax < p[m]) { cmax = p[m]; loc = m; } } return loc; } void GetFish() { int i, j; int T = h * 60, t, CT; for(i = 1; i <= n; i++) { lake[i].max = 0; for(int j = 1; j <= n; j++) { lake[i].num[j] = 0; } } for (i = 1;i <= n; i++) { CT = T; t = 0; for (j = 1; j <= i; j++) { cfi[j] = fi[j]; CT = (j < i) ? CT - ti[j] * 5 : CT; } while (t < CT) { int k = GetMax(cfi, 1, i); lake[i].max += cfi[k];//钓鱼总量增加在k湖一个单位时间钓到的鱼 lake[i].num[k] += 5;//停在k湖的时间增加一个单位时间 cfi[k] >= di[k] ? cfi[k] -= di[k] : cfi[k] = 0;//修改第k个湖在下一个时间单位中所能钓到的鱼 t += 5; } } for (i = 1; i <= n; i++)//将最大值拷贝到cfi数组中,用于查询真正最大值 { cfi[i] = lake[i].max; } int la = GetMax(cfi, 1, n); for (i = 1; i <= n; i++) { (i != n) ? printf("%d, ", lake[la].num[i]) : printf("%d", lake[la].num[i]); } printf("\nNumber of fish expected: %d\n\n", lake[la].max); } int main() { int i; while (scanf("%d", &n) && n) { scanf("%d", &h); for (i = 1; i <= n; i++) scanf("%d", &fi[i]); for (i = 1; i <= n; i++) scanf("%d", &di[i]); for (i = 1; i < n; i++) scanf("%d", &ti[i]); GetFish(); } return 0; } |
Double click to view unformatted code.