1 #include<iostream>
2 #include<string>
3 #include<cmath>
4 using namespace std;
5
6 #define MAX 20
7 int n; // n个湖
8 int h; // h个小时
9 int maxValues = 0; // 能钓到最多鱼时所要走到湖 i, maxValues记录i这个下标
10 int ti[MAX]; // ti[i]: 从第 i 个湖走到第 i + 1 个湖所需时间
11 int fi[MAX]; // fi[i]: 第i个湖第一次能的钓到的鱼的数量
12 int cfi[MAX]; // 更新后每个湖此次能钓到鱼的数量
13 int di[MAX]; // 在某个湖的第 i 次钓鱼时减少的钓鱼量 di[i-1]
14
15 struct LakeNode {
16 int max; // 每个湖目前若干次钓到的鱼的数量
17 int num[MAX]; // 每个湖
18 };
19
20 LakeNode Lakes[MAX];
21
22 // 获取此时从编号 1 - j 的湖中能钓到鱼的数量最多的某个湖的下标
23 int getMaxIndex(int i, int j) {
24 int maxIndex = i;
25 for (int k = i; k <= j; k++) {
26 if (cfi[k] > cfi[maxIndex])
27 maxIndex = k;
28 }
29
30 return maxIndex;
31 }
32
33
34 void fishing() {
35 // 在终端输入h小时,转换为分钟,分为行走和钓鱼两部分时间
36 int T = h * 60;
37 for (int i = 1; i <= n; i++) {
38 for (int j = 1; j <= i; j++) {
39 // 初始化
40 cfi[j] = fi[j];
41
42 // 1. 行走
43 if (j < i)
44 T = T - 5 * ti[j];
45 }
46
47 // 2. 钓鱼
48 int t = 0;
49 while (t < T) {
50 // 记录以第i个湖为结束情况的方案所能钓到的最多的鱼数量
51 int maxIndex = getMaxIndex(1, i);
52 Lakes[i].max += cfi[maxIndex];
53 Lakes[i].num[maxIndex] += 5; // 记录以第 i 个湖为结束钓鱼方案的 第j个湖所花费的时间
54
55 if (cfi[maxIndex] >= di[maxIndex])
56 cfi[maxIndex] -= di[maxIndex];
57 else
58 cfi[maxIndex] = 0;
59 t += 5;
60
61 }
62
63
64 }
65
66
67
68 }
69
70
71 int main() {
72
73 cin >> n;
74 cin >> h;
75
76 // 初始化
77 for (int i = 1; i <= n; i++) {
78 Lakes[i].max = 0;
79 for (int j = 1; j <= n; j++) {
80 Lakes[i].num[j] = 0;
81 }
82 }
83
84 // 输入移动相邻所花费的时间
85 cout << "输入移动相邻所花费的时间: " << endl;
86 for (int i = 1; i < n; i++)
87 cin >> ti[i];
88
89 cout << "初始化每个湖鱼的个数:" << endl;
90 for (int i = 1; i <= n; i++)
91 cin >> fi[i];
92
93 cout << "一个间隔鱼减少的个数:" << endl;
94 for (int i = 1; i <= n; i++)
95 cin >> di[i];
96
97 fishing();
98
99 cout << "最佳方案:" << endl;
100 for (int i = 1; i <= n; i++)
101 if (Lakes[i].max > Lakes[maxValues].max)
102 maxValues = i;
103
104 cout << "钓鱼总数目:" << Lakes[maxValues].max << endl;
105
106 // 输出在每个湖的钓鱼时间
107 for (int j = 1; j <= n; j++)
108 if (Lakes[maxValues].num[j] != 0)
109 cout << "在第" << j << "个湖总共停留了" << Lakes[maxValues].num[j] << "分钟。" << endl;
110
111 system("pause");
112 return 0;
113 }
