[cpp]
描述:暴力+貪心,先定向選擇依次只能到達第一個湖、第二個湖……最後一個湖,就會變成選擇最優解問題,選擇和最大的就可以了,注意有可能數據都是為零的時候,這是把所有的時間都用在第一個湖就可以了
#include <cstdio>
#include <cstring>
int main()
{
// freopen("a.txt","r",stdin);
int t[30],f[30],d[30],s[30];
int h,n,count,p=0;
while(scanf("%d",&n)!=EOF)
{
if(!n) break;
if(p) printf("\n");
scanf("%d",&h);
h*=60;
for(int i=0; i<n; i++) scanf("%d",&f[i]);
for(int i=0; i<n; i++) scanf("%d",&d[i]);
count=t[0]=0;
for(int i=1; i<n; i++)
{
scanf("%d",&t[i]);
t[i]=t[i]*5+t[i-1];
}
memset(s,0,sizeof(s));
for(int i=0; i<n; i++)
{
int leave=h-t[i];
if(leave<5) break;
int sum=0,pos=0,temp[30],m[30],flag,c;
for(int j=0; j<=i; j++)
{
m[j]=f[j];
temp[j]=0;
}
while(leave>=5)
{
flag=c=0;
for(int j=0; j<=i; j++)
if(m[j]>c)
{
c=m[j];
pos=j;
flag=1;
}
if(!flag) break;
temp[pos]+=5;
sum+=c;
m[pos]-=d[pos];
leave-=5;
}
if(leave>=5) temp[0]+=leave;
if(sum>count)
{
count=sum;
for(int j=0; j<=i; j++) s[j]=temp[j];
}
}
if(!count) s[0]=h;
printf("%d",s[0]);
for(int i=1; i<n; i++) printf(", %d",s[i]);
printf("\nNumber of fish expected: %d\n",count);
p++;
}
return 0;
}