贪心
贪心
不严谨地说,可贪心的问题必须满足,目前的较优状态,之后进行同样的操作,仍然是较优的状态。即状态关于答案优劣的大小关系满足类似不等式的一些计算法则。
邻项交换法
简介
一个函数分别会依次对 \(n\) 个元素进行复合计算,要求对这 \(n\) 个元素进行排序,使得答案最优。排序使选择两个元素,假设只有两个元素的情况下,使用最优的排序方式作为这两个元素的相对顺序。
对于两项 \((a_x,b_x),(a_y,b_y)\),我们比较谁在前面谁在后面,只需要比较仅有这两项的情况下,谁前谁后是更优的。满足 \(a_i\ge b_i\)。
若 \(x\) 在 \(y\) 前,所需要的血量为 \(\max(a_x,b_x+a_y)\)。
若 \(y\) 在 \(x\) 前,所需要的血量为 \(\max(a_y,b_y+a_x)\)。
我们不妨认为血量是大于 \(\max(a_x,a_y)\) 的。因此我们只需要比较 \(b_x+a_y\) 和 \(b_y+a_x\) 的大小关系,就知道先杀谁会比较好了。
感性证明邻项局部最优是全局最优的充分条件:贪心问题必须满足可贪心性,即如果当前较优的状态,后面进行相同的操作这个状态仍然是较优的。所以局部最优的话,其他地方(包括前后和之间)执行一样的操作,局部最优仍然是最优的。
经验
P1080 [NOIP2012 提高组] 国王游戏 邻项交换法典题。
对于大臣 \(x,y\),计算 \(val(x,y)<val(y,x)\) 这个不等式成立的条件。
因为我们总是有 \(\frac{1}{b_x}<\frac{a_y}{b_x}\) 和 \(\frac{1}{b_y}<\frac{a_x}{b_y}\),所以直接按照 \(\frac{a_x}{b_y}<\frac{a_y}{b_x}\) 排序就可以了。建议移项再比较。因为要写高精度,所以我不写了。
P2123 皇后游戏 国王游戏的加强版
根据式子,拿到最多奖金的一定是最后一名大臣。由于 \(\max\) 里面有一个 \(c_{i-1}\) 感觉不好贪心。
我们感觉可以把前一个当做第一个人来比较 \(\max(a_x+b_x+b_y,a_x+a_y+b_y)\) 和 \(\max(a_y+b_y+b_x,a_y+a_x+b_x)\)。证明见第一篇题解。由于也要写高精度,就不写了。
本文来自博客园,作者:liyixin,转载请注明原文链接:https://www.cnblogs.com/liyixin0514/p/18635910