贪心算法例题

贪心问题的求解:

1.首先判断是否符合贪心策略(能通过局部最优解得到全局最优解)

2.将问题拆分为子问题求局部最优解

3.将子问题的答案合并得到全局最优解

4.贪心策略总是做出当前最优的选择,因此总和求最值的操作结合在一起,多数的贪心题往往要首先实现排序(或者使用优先队列)。

例题

点击题目即可跳转到相应oj,示例代码放在了github上:ExampleCode/贪心算法例题

*1. 小Q购物 来源AcWing:难度较大,推荐尝试一下。要覆盖一段固定的区间,当然用的数字越大要用的数量就越少。但是想要用一个数字i来完整地覆盖1~m的区间,就必须满足已经覆盖了1~i-1的区间。将硬币从小到大排序,对每个币值i,如果已经覆盖了1~i-1,就用它来覆盖剩下的区间,直到能用更大币值的硬币来覆盖。

*2. 发工资 来源牛客网:贪心思路简单,钞票资金不能刚好凑齐工资时尽量保证超过得越少越好,但是怎么用代码实现要花点功夫思考。

3. Flooded 来源牛客网:题目背景不算贪心问题,但是思路仍然属于贪心策略,水往低处流,所以会优先积满地势低的格子,题目有n*m的格子,从小到大排成一排按顺序计算积水高度即可。

4. Homework 来源codeforces:难度不大,优先删除出现次数少的字符。

5. Buy One Get One Free 来源牛客网:简单的贪心题,两个数组都从小到大排序,买一捆优质干草优先选一捆最小的劣质干草就可以。

*6. 钓鱼 来源牛客网:本题可能会优先想到用动态规划去解,事实上确实有一个动态规划的解法,时间复杂度为O(n^{3}),可以自行了解。仔细分析题意会发现问题可以简化,假设在钓到最多鱼的情况里佳佳最后停留在i鱼塘,那么到达i以及i之前的鱼塘的顺序其实是不重要的,所以只用每次在这中间选能钓到最多鱼的鱼塘钓鱼就可以了,利用优先队列处理,最后比较不同i时的最大值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值