开发者社区> 问答> 正文

遇到一个贪心算法问题,求解答。

圣诞节马上就要来了,果园里的n棵圣诞树马上就要结果子了,每棵圣诞树会在第a[i] 天结出b[i] 个果实。果园里有许多圣诞小精灵,它们非常喜欢吃圣诞果,如果在结果后两天内也就是第a[i]天和第a[i]+1天,没有将果实采摘下来,那么将会被小精灵们偷吃掉。你,作为圣诞树的看守者,必须采摘尽可能多的圣诞果,但是你每天最多只能采摘v个圣诞果,当然,可以是不同的果树上的。现在你需要判断自己最多可以收获多少圣诞果。输入圣诞树棵树n、每天最多采摘的圣诞果数量v和一个数m,其中 m[i]=[a[i],b[i]] 表示每棵圣诞树第 a[i] 天结出 b[i] 个果实(1<= n,a[i],b[i]<=3000)。输出一个数字,表示最多可以收获的圣诞果数。

展开
收起
游客4skzfvnrxrzbi 2021-12-23 16:35:47 449 0
1 条回答
写回答
取消 提交回答
  • 定义数组a[i]表示第i天可以采摘的刚刚结出来的果子,数组b[i]表示第i天可以采摘的已经过了一天的果子。根据输入先初始化 a[]。假设我们当前处于第i天,那么显然我们应该采摘b[i]中的果实,然后再采摘a[i]中的果实,因为如果不采摘b[i]中的果实,则它们会在下一天被偷吃。在更新之后 a[i] 中剩余的果实会在下一天变成b[i]中的果实。 因此:输入:3 3 [[1,3],[2,5],[3,4]] 输出:12 注:你可以在第一天在第一棵树上摘三个,第二天在第二棵树上摘三个,第三天在第二棵树上摘两个,然后再在第三颗树上摘一个,第四天在第三棵树上摘三个。

    2021-12-23 18:28:45
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载