poj1042(枚举+贪心 C语言)

来源:互联网 发布:卡盟附带支付源码 编辑:程序博客网 时间:2024/05/20 08:44

         题目链接:http://poj.org/problem?id=1042

          题目意思:john现有h个小时的空闲时间,他打算去钓鱼。john钓鱼的地方共有n个池塘,所有的池塘沿着一条单向路顺序排列(john每在一个池塘钓完鱼后,他只能走到下一个池塘继续钓),john必须从1号池塘开始钓起,但是他可以在任何一个池塘结束他此次钓鱼的行程。john在每个池塘中每5分钟钓的鱼数(此题中以5分钟作为单位时间),随时间的增长而线性递减。而每个池塘中头5分钟可以钓到的鱼数以及每个湖中相邻5分钟钓鱼数的减少量,input中均会给出。并且John从任意一个池塘走到它下一个池塘的时间input中也都给出

           思路:总体思想是贪心,先枚举John只在前1.2.3...n个池塘里钓鱼,然后用总时间减去路上的时间,剩下的时间就是在池塘钓鱼的时间,然后利用贪心思想,在总是在期望钓到鱼最多的池塘里钓即可(这个要好好思考一下,为什么减去路上的时间之后,John可以任意在各个池塘之间移动,不用再考虑在池塘间转移路上的时间)。 

代码:

#include<stdio.h>#include<string.h>int h,n;int t[30],f[30],d[30],num[30],tempnum[30],nowf[30];/*        num[]记录在每个池塘的时间;tempnum[]临时记录每种情况在每个池塘的时间nowf[]记录当前这个5分钟在每个池塘钓的鱼的数量*/int stop;int max,temp;int ans,tempans;void slove(int tp,int temph){int i,flag;memset(tempnum,0,sizeof(tempnum));//初始化在每个池塘钓鱼的时间为0tempans=0;for(i=0;i<=tp;i++){temph-=t[i];nowf[i]=f[i];}while(temph>0){ max=-1;         for(i=0;i<=tp;i++)//判断接下来的5分钟哪个池塘钓到的鱼最多 {             if(nowf[i]>max) { max=nowf[i]; temp=i; } } if(temp==0 && nowf[temp]==0)//所有池塘都没有鱼了,按照题目输出要求,只需要在第一个池塘耗完时间即可 { tempnum[temp]+=temph; break; } tempans+=nowf[temp]; tempnum[temp]+=5; temph-=5; nowf[temp]-=d[temp]; if(nowf[temp]<0)//池塘里没有鱼了,变为0 nowf[temp]=0;}  if(tempans>ans)//以下为满足题目输出要求加以判断的代码  {  ans=tempans;  for(i=0;i<n;i++)  num[i]=tempnum[i];  }  else if(tempans==ans)  {    for(i=0;i<n;i++)  {  if(num[i]>tempnum[i])  {  flag=0;  break;  }  if(tempnum[i]>num[i])  {  flag=1;  break;  }  }  if(flag)  for(i=0;i<n;i++)  num[i]=tempnum[i];  }}int main(){int i;while(scanf("%d",&n) && n!=0){scanf("%d",&h);h=h*60;for(i=0;i<n;i++)scanf("%d",&f[i]);for(i=0;i<n;i++)scanf("%d",&d[i]);t[0]=0;for(i=1;i<n;i++){scanf("%d",&t[i]);t[i]=t[i]*5;}ans=-1;memset(num,0,sizeof(num));        for(stop=0;stop<n;stop++)//枚举在只在前面1.2.3...n个池塘钓鱼的情况      slove(stop,h);for(i=0;i<n-1;i++)printf("%d, ",num[i]);printf("%d\nNumber of fish expected: %d\n\n",num[n-1],ans);}return 0;}


 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 海里遇到暗流怎么办贴吧 东海通忘记客户号怎么办 证券客户号忘了怎么办 热收缩机有空气怎么办 韩国国籍签证到期想回国怎么办 休闲裤裤脚长了怎么办 电大本科统考考不过怎么办 一案涉及两个法律关系怎么办 法院调解书被告不执行怎么办 电视cas授权已过期怎么办 网贷逾期被仲裁怎么办 word所选内容无效怎么办 wps批注不显示了怎么办 船舶挂靠船务公司去要怎么办 被螃蟹扎了肿了怎么办 手指被海鲜刺了怎么办 被海鲜刺进去了怎么办 手被海鲜扎了怎么办 环评设备写错了怎么办 物业对高空抛物怎么办 如果法官不公平判案我该怎么办? 民事案夸省审理案件不公平怎么办 积目头像未通过审核怎么办 电压不稳空调带不动怎么办 孩子吃了塑料珠怎么办 美的电压力锅打不开盖子怎么办 瓶盖打不开怎么办 瓶子是玻璃的 杯子口关错位了怎么办 大玻璃瓶的玻璃瓶盖拧不开怎么办 按压式洗发水瓶盖打不开怎么办 向下按压的瓶盖打不开怎么办 玻璃罐头开过了打不开怎么办 玻璃瓶的塑料盖子打不开怎么办 泡酒玻璃瓶盖子打不开怎么办 罐头的塑料瓶盖打不开怎么办 塑料水杯盖紧了怎么办 拧不开矿泉水瓶盖怎么办 新暖壶盖吸住了怎么办 暖瓶盖被吸住了怎么办 做面包和面粘手怎么办 面包面和稀了怎么办