钓鱼问题

来源:互联网 发布:丝绸之路大数据产业园 编辑:程序博客网 时间:2024/04/27 17:59

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

题意:

有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)。

原创粉丝点击