POJ 1042 Gone Fishing

来源:互联网 发布:网络空间研究院 编辑:程序博客网 时间:2024/06/01 10:18

分析:题意就不说了,枚举出从起点1到终点e(1<=e<=n)钓鱼数量最大值,先用总时间h减去在路上花掉的时间time,就是剩余的钓鱼时间time,每次取能钓到鱼的数量最多的湖。

# include <stdio.h>  struct//从第1个湖到第e个湖之间  {  int count;//能钓到鱼数量的最大值  int f[30];//每个1到e之间每个湖能钓到的鱼的数量  int time[30];//在1到e之间每个湖钓的时间  }end[30];  int main()  {  int i,j,n,h,e,time,max,k,f[30],d[30],t[30],huan=0;  while(scanf("%d",&n),n!=0)  {  scanf("%d",&h);  for(i=1;i<=n;i++)  scanf("%d",&f[i]);  for(i=1;i<=n;i++)  scanf("%d",&d[i]);  for(i=1;i<n;i++)  scanf("%d",&t[i]);  for(e=n;e>=1;e--)//枚举出从第1个湖到第e个湖(1<=e<=n)的情况  {  for(i=1;i<=e;i++)  {  end[e].f[i]=f[i];  end[e].time[i]=0;  }  end[e].count=0;  time=0;  for(i=1;i<e;i++)  time+=5*t[i];  time=60*h-time;  while(1)  {  if(time<5)  break;  max=k=0;  for(i=1;i<=e;i++)  if(end[e].f[i]>max)  {  max=end[e].f[i];  k=i;  }  if(max==0)  break;  time-=5;  end[e].count+=max;  end[e].time[k]+=5;  end[e].f[k]-=d[k];  if(end[e].f[k]<0)  end[e].f[k]=0;  }  end[e].time[1]+=time;  }  max=0;k=0;  for(i=1;i<=n;i++)  if(end[i].count>max)  {  max=end[i].count;  k=i;  }  else if(end[i].count==max)  {  for(j=1;j<=k;j++)  if(end[i].time[j]<end[k].time[j])  break;  if(j>k)  k=i;  }  if(huan==1)  putchar('\n');  huan=1;  for(i=1;i<n;i++)  printf("%d, ",end[k].time[i]);  printf("%d\n",end[k].time[i]);  printf("Number of fish expected: %d\n",end[k].count);  }  return 0;  }


0 0