#include <iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
const int N = 25;
int n, h;
int f[N], d[N], t[N]; //f第一個5分鐘釣魚量 d每個5分鐘釣魚減少量 t從i到i+1需要5分鐘個數
int ans;
int each[N]; //採用最優方案是,在i胡的釣魚時間
int tans, teach[N]; //最優釣魚量和各個湖釣魚的時間
int th, tf[N]; //有效釣魚時間和每個5分鐘釣魚量
int main()
{
int i, j;
while (cin >> n && n>0)
{
cin >> h;
for (i = 0; i<n; i++)
cin >> f[i];
for (i = 0; i<n; i++)
cin >> d[i];
for (i = 0; i<n - 1; i++)
cin >> t[i];
h *= 12;
ans = -1;
for (i = 0; i<n; i++)
{
//初始化每次貪心的相關量
th = h;
for (j = 0; j<n; j++)
{
tf[j] = f[j];
teach[j] = 0;
}
tans = 0;
//對每一個5分鐘貪心選擇釣魚量最大的湖釣魚
while (th>0)
{
int ind, max;
ind = 0; max = tf[0];
for (j = 1; j <= i; j++)
{
if (tf[j]>max)
{
max = tf[j]; ind = j;
}
}
if (max == 0) //最大的釣魚量為0時將剩餘釣魚時間加到第一個湖上的釣魚時間
{
teach[0] += th * 5;
break;
}
else
{
teach[ind] += 5;
tans += tf[ind];
if (tf[ind] >= d[ind])
{
tf[ind] -= d[ind];
}
else tf[ind] = 0;
}
th--;
}
//走過的湖個數為i+2時候的釣魚時間
if (i != n - 1) h -= t[i];
//更新最優方案結果
if (tans>ans)
{
ans = tans;
for (j = 0; j<n; j++)
each[j] = teach[j];
}
}
//輸出結果
cout << each[0];
for (i = 1; i<n; i++)
{
cout << ", " << each[i];
}
cout << endl;
cout << "Number of fish expected: " << ans << endl;
cout << endl;
}
return 0;
}
非原創,轉自網路。