【概述】
贪心算法是从问题的初始状态出发,通过若干次的贪心选择而得到的最优值的一种求解策略,即贪心策略。

简单来说,贪心策略是一种在每次决策时采取当前意义下最优策略的算法,做出的选择至少在某种约束条件下的局部最优解或较优解,并不一定是全局的最优解或较优解,但在某些特定的情况下,可以利用贪心算法来求得其最优解或较优解。

贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即:某个状态以前的过程不会影响以后的状态,只与当前状态有关。

当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质,问题的最优子结构性质是该问题可以用动态规划或者贪心算法求解的关键特征。

【一般步骤】
建立数学模型来描述问题;
把求解的问题分成若干个子问题;
对每一子问题求解,得到子问题的局部最优解;
把子问题的局部最优解合成原来问题的一个解。
简单来说,就是根据要求,不断选择最大/最小的,直到满足/不满足条件为止

2.部分背包问题
问题:n 个物品,第 i 个物品重量为 wi,价值为 vi,
在总重量不超过 C 的情况下让总价值尽量高,每一个物品可以取走一部分,
价值与重量按比例计算

贪心策略:本质上在最优选择问题的基础上加了价值项,
不能仅考虑重量因素或价值因素,应该综合考虑两个因素,
即优先选择价值和重量比值最大的,
直到重量和为 C,需要注意的是,
由于每个物品只能选择一部分,
因此一定可以让总重量恰好为 C,而且除了最后一个物品以外,
其他物品要么不选要么全选