贪心算法2022.3.21
在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而使得问题得到全局最优解。
贪心算法与枚举法的不同之处在于每个子问题都选择最优的情况,然后向下继续进行,且不能回溯,
1.证明原问题的最优解之一可以由贪心选择得到。
2.将最优化问题转化为这样一个问题,即先做出选择,再解决剩下的一个子问题。
3.对每一子问题一一求解,得到子问题的局部最优解;
4.把子问题的解局部最优解合成原来解问题的一个解
找钱问题的贪心解法:
将大问题转化为一个个小的子问题,每次选择最大的钱数使得总量最小。
搬行李问题:想让总时间最小->大家都能同时搬行李->重叠搬行李的人的时间是最终时间
#include<bits/stdc++.h>
万能头文件
#include<algorithm>:给sort用
可拆分背包的一般解法为:
这里有 n 种不同值 v[i] 和权重 w[i] 的对象(如果选择该对象的 w[i] 可以获得值 v[i])。
你有一个容器来挑选它们。你可以根据自己的需要把它们分成任意大小的碎片。可以拾取的对象的最大重量给定为 w。请计算您能得到的最大值。
就像是这个题目,要想吃回本就要捡着贵的吃,但是贵只是一方面,人会饱,所以用价格除以质量所获的价格商才是贪心准则,应按照价格商优先进行选取。
于是这个题,就要用的我们之前学的知识了。这里因为要整体排序,所以要先创建一个类,然后自定义 cmp 函数,在使用 sort 排序。
别忘了用结构体嘛,这里有好多需要统计的东西。