Gone Fishing POJ 1042

时间:2023-03-09 01:09:51
Gone Fishing POJ 1042
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
/*
枚举以不同湖结束的情况(路上时间固定),从其中每次选钓鱼量最大的(注意在这里不需要考虑顺序,因为迟早为轮到这个点)
在前面不同湖里钓鱼时间 int t[i][j] i为结束时在j点上钓鱼花费时间
ti[],di[],fi[]
枚举的时候要创建临时数组temp保存fi的值,在temp上修改
*/
#define MAXN 100
int n,h;
int fi[MAXN],ti[MAXN],di[MAXN];
int temp[MAXN];//保存临时鱼的数量
int sum[MAXN];
int time[MAXN][MAXN];//以i点结束时在j点停留的时间
void solve()
{
memset(time,,sizeof(time));
memset(sum,,sizeof(sum));
for(int i=;i<=n;i++)
{
memcpy(temp,fi,sizeof(fi));
int T = h*;
for(int j=;j<i;j++) T-=ti[j]*;
while(T>)
{
int k = max_element(temp+,temp+i+)-temp;
//cout<<";;"<<k<<endl<<";;"<<*max_element(temp+1,temp+i+1)<<endl;
time[i][k]+=;
sum[i]+=temp[k];
temp[k]-=di[k];
if(temp[k]<) temp[k] = ;
T=T-;
}
}
int l = max_element(sum+,sum+n+)-sum;
//cout<<";;"<<l<<endl;
for(int i=;i<=n;i++)
{
if(i!=) printf(", ");
printf("%d",time[l][i]);
}
printf("\nNumber of fish expected: %d\n\n",sum[l]); }
int main()
{
while(scanf("%d",&n))
{
if(n==) break;
scanf("%d",&h);
for(int i=;i<=n;i++)
{
scanf("%d",&fi[i]);
}
for(int i=;i<=n;i++)
{
scanf("%d",&di[i]);
}
for(int i=;i<=n-;i++)
{
scanf("%d",&ti[i]);
}
solve();
}
return ;
}