钓鱼问题

黑书中的例题,感觉思维跨度比较大。

题意:

有N个湖,假如有一人需要在这N个湖中钓鱼,只能往右的湖走,不能回头,可以在某一个湖中终止,开始在第1个湖,第i个湖到第 i+1个湖需要 5*ti 分钟的时间,而在第i个湖钓5分钟鱼可以得到vi条鱼,接下来如果继续钓5分钟的话,会减少di条,给定总的时间H,编程求能钓最多鱼的方案。

分析:

解题巧妙的地方在于,一开是枚举在所有湖中结束钓鱼的可能,然而对于每一种结束可能,计算出从第1个湖到final那个湖的总时间,T(final) = ∑ti,(1 <= i <= final), 以5分钟为一个单位,然后可以使用优先队列以O(logn)的时间维护,由于最优解只和5分钟能钓到的鱼而不是湖中鱼的总数量有关,所以使用贪心策略,每一个单位时间去钓鱼最多的湖钓,假设总共有s个单位时间,那么这个算法的时间复杂度为O(knlogn)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值