贪心算法
定义:在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。(将一个复杂的求最优解的问题转化为多个小的问题,每个小问题的最优解加在一起就是全局的最优解)
注:一个问题在有好几种算法解决的情况下,贪心算法是最好的解决办法。
最优子结构:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。
一般结构: (1)候选集合A:问题的最终解均取自于候选集合A。
(2)解集合S:解集合S不断扩展,直到构成满足问题的完整解。
(3)解决函数solution:检查解集合S是否构成问题的完整解。
(4)选择函数select:贪心策略,这是贪心算法的关键。
(5)可行函数feasible:解集合扩展后是否满足约束条件。
存在问题:1. 不能保证求得的最后解是最佳的;
2. 不能用来求最大或最小解问题;
3. 只能求满足某些约束条件的可行解的范围。
背包问题:1. 0-1背包问题(不可分割)
2. 背包问题(可分割)
总结:经过这段时间的学习总结了几点值得注意的问题
- 迭代器是一种遍历的工具,不止应用于set 的输出。
- While(scanf()!=EOF)比其他死循环更省时
- 优先队列很好用,默认为大根堆,也可以自己调(priority_queue <LL,vector,greater >)
- Map++是实值加一
- 向量定义系统默认10个元素
6.string类型有空格是可以用getline()输入