问题描述

约翰有h(1≤h≤16)个小时的时间,在该地区有n(2≤n≤25)个湖,这些湖刚好分布在一条路线上,该路线是单向的。约翰从湖1出发,他可以在任一个湖结束钓鱼。但他只能从一个湖到达另一个与之相邻的湖,而且不必每个湖都停留。
已知在最初5分钟,湖i预计钓到鱼的数量为fi(fi≥0)。以后每隔5分钟,预计钓到鱼的数量将以常数di(di≥0)递减。如果某个时段预计钓到鱼的数量小于或等于di,那么在下一时段将钓不到鱼。为简单起见,假设没有其它的钓鱼者影响约翰的钓鱼数量。

问题分析

首先分析问题,在钓鱼的过程中,访问鱼塘的顺序是单向的,但只能从一个鱼塘到相邻的下一个鱼塘,并且从一个鱼塘到相邻的下一个鱼塘路程是要耗费时间的。
以5分钟为时间周期,每一个时间周期之后鱼塘一个周期钓到鱼的数量就会减少,即每经过5分钟,fi就会减少对应的di,直到fi小于等于di时,下一周期便不会钓到鱼。
问题的关键在于怎么在各个鱼塘上分配时间来钓到更多的鱼。给定n之后,即给定鱼塘的数量,就可以把钓鱼的分为以下几个情况,在i(1,2,3,4,5…n)个鱼塘结束钓鱼进行钓鱼,由于钓鱼的方向是有向的,我们就可以知道在i个鱼塘之间钓鱼时,需要花费在路程上的时间,这时我们只需要考虑如何在i个鱼塘上分配时间,即每一个周期都选择fi最大的,看似这种方式好像违背了题目中钓鱼方向单向的要求,但并非如此

如图所示,虽然在算法过程我们先在1,2号鱼塘钓完鱼之后有返回1号鱼塘,但实际的过程则是直接在1号鱼塘上进行了两个周期,然后再进入第二个鱼塘进行钓鱼,我们的算法只是计算出在各个鱼塘中应该垂钓几次以达到最大钓鱼量。这样依次计算访问i(1,2,3,4,5…n)个鱼塘所产生的最优解最后得到最好的那一个。

代码

f[30]:表示没个鱼塘初始周期可钓鱼数量
d[30]:表示经过一个周期之后f[i]的减少量
plan[30]:表示在每个鱼塘耗费的周期数量
t[30]:表示在前往临近鱼塘的时间
best:最多的钓鱼数量

void Max(int pos,int time)
{int f1[30],all=0;for(int i=0;i<pos;i++){f1[i]=f[i];}int p[30];int max_f;int idex=0;memset(p,0,sizeof(p));while(time>=5){for(int i=0;i<pos;i++){max_f=0;idex=0;if(f1[i]>max_f){max_f=f1[i];idex=i;}}if(max_f>0){all+=max_f;f1[idex]=f1[idex]-d[idex];time-=5;p[idex]++;}else{break;}}if(all>best){for(int i=0;i<30;i++){plan[i]=p[i];}best=all;}
}

上述代码为了求出在第pos个池塘停止钓鱼,纯钓鱼时间为time的最多钓鱼量

 for(int i=0;i<n;i++){int time=h*60;for(int k=0;k<i;k++){time-=t[k];}Max(i+1,time);}

上述代码为了求出在第i个鱼塘为结束位置时,需要耗费的路途时间,从未得到纯钓鱼时间带入Max函数中,来求得最大钓鱼量。

鱼塘钓鱼 贪心算法相关推荐

  1. SSL 2331 洛谷 1717 信息学奥赛一本通 1373 鱼塘钓鱼#贪心#

    动态规划 温馨提示:交洛谷请在总时间*12并调整输入格式. 题目 设计一个钓鱼方案,从第1个鱼塘出发,希望能钓到最多的鱼. 分析 首先是贪心,最后在第i个鱼塘钓鱼的话,那么路上的时间是固定的,所以也可 ...

  2. 贪心算法-鱼塘钓鱼程序

    1.题目描述 约翰有h(1≤h≤16)个小时的时间,在该地区有n(2≤n≤25)个湖,这些湖刚好分布在一条路线上,该路线是单向的.约翰从湖1出发,他可以在任一个湖结束钓鱼.但他只能从一个湖到达另一个与 ...

  3. 算法经典“钓鱼”问题详解 基于贪心算法 C语言描述

    算法经典"钓鱼"问题详解 基于贪心算法 初始条件 在一条水平路边,有 n 2 ≤ n ≤ 25个钓鱼池,从左到右编号为1.2.3.--.n.小明有H1 ≤ H ≤ 16个小时的空余 ...

  4. 鱼塘钓鱼 优先队列 多路归并排序 贪心

    鱼塘钓鱼 优先队列 多路归并排序 贪心 优先队列介绍 贪心思想:不会回头 解题思想:枚举0-N-1目的地鱼塘k, 如图 从上到下 选t(钓鱼的时间)个数,使和最大 #include<iostre ...

  5. 1373:鱼塘钓鱼(fishing)——优先队列+贪心

    [题目描述] 有N个鱼塘排成一排(N<100),每个鱼塘中有一定数量的鱼,例如:N=5时,如下表: 即:在第1个鱼塘中钓鱼第1分钟内可钓到10条鱼,第2分钟内只能钓到8条鱼,--,第5分钟以后再 ...

  6. 【一本通评测 1373】【堆】【贪心】鱼塘钓鱼

    鱼塘钓鱼 题目 解题思路 Code 一本通评测 1373:鱼塘钓鱼(fishing) 题目 [题目描述] 有N个鱼塘排成一排(N<100),每个鱼塘中有一定数量的鱼,例如:N=5时,如下表: 鱼 ...

  7. 提高篇 第一部分 基础算法 第1章 贪心算法

    一本通提高篇在线提交地址 一本通提高篇在线提交地址_老象的专栏-CSDN博客 [ 贪心 进阶总结 ][ 来自一本通提高篇 ] [ 贪心 进阶总结 ][ 来自一本通提高篇 ]_violinwang-CS ...

  8. 基础算法 —— 贪心算法

    [概述] 贪心算法是从问题的初始状态出发,通过若干次的贪心选择而得到的最优值的一种求解策略,即贪心策略. 简单来说,贪心策略是一种在每次决策时采取当前意义下最优策略的算法,做出的选择至少在某种约束条件 ...

  9. 鱼塘钓鱼(信息学奥赛一本通-T1373)

    [题目描述] 有N个鱼塘排成一排(N<100),每个鱼塘中有一定数量的鱼,例如:N=5时,如下表: 即:在第1个鱼塘中钓鱼第1分钟内可钓到10条鱼,第2分钟内只能钓到8条鱼,--,第5分钟以后再 ...

最新文章

  1. PMP知识要点(第七章)
  2. 贝壳扫地机器人_科沃斯每个型号扫地机器人的特点是什么?
  3. (转)LinqToSql的连接字符串自动调用配置文件中的连接字符串
  4. 水晶报表-横向设计页面,设置网格高度
  5. 忘记密码漏洞案例分析
  6. C# Android wifi控制灯,求助如何在基于安卓通过WiFi与Arduino通信,实现对LED灯的控制。...
  7. Node.js: exports 和 module.exports 的区别
  8. kubernetes与web集群
  9. bash shell简介及变量
  10. 获取浏览器语言的解决方案
  11. python中的doctest_Python测试框架doctest
  12. SCI从入门到精髓(三)——如何写出牛文章
  13. 【UBB】UBB代码简介
  14. 视频怎么转化成动态图?巧用视频转gif生成器
  15. 数据挖掘导论课后习题答案-第三章
  16. 关于微信小程序认证问题
  17. 钛资本研究院:科技创投,ToB也性感
  18. R语言进入,提示都是日文怎么切换
  19. 微信小程序通过PHP控制云开发数据库的写入,读出,更新,删除
  20. win10搭建android monkeyrunner自动化测试环境

热门文章

  1. 画部分点之间的连线图
  2. 个人站长怎么兼职赚钱
  3. Android 10.0获取本地视频及其预览图
  4. Python爬虫教你获取4K超清壁纸图片,手把手教你跟我一起爬!
  5. 随机抽人名小程序_这些好用的微信小程序,你知道多少?
  6. 雄霸迈阿密java_罪恶都市3之雄霸迈阿密
  7. arduino温度控制器_适用于FPS的最佳控制器-使用Arduino和OrbShield与Windows 7配合使用的SpaceTec SpaceOrb 360控制器...
  8. git 合并分支(开发分支dev合并到主分支master)
  9. 隆云通土壤ORP传感器
  10. 【微信群助手】微信社群怎么运营?微信群规则范本