#149. 01 分数规划

为什么不能根据性价比贪心?很明显是对的啊?

这样想就行了,假设现在要选一样新物品:也许\(A\)的性价比很小或者就是\(0\),但是它的体积却也十分微小,对总体影响也微不足道;也许\(B\)的性价比较大但是它的体积非常非常大,干脆想象成无限好了,这样总体的性价比也就极其接近\(B\)了,影响很大。此时显然前者更优。既然局部最优解都保证不了还谈什么全局最优解呢?

这就需要引入二分(二分最大值)了。不妨换一种思路贪心:当我们确定了某个分数后,每样物品都有了它独自的贡献。显然,这个贡献可正可负,表示在满足当前分数后,对答案额外的价值贡献。排序后选贡献多的就行。

举个栗子:现在二分出分数是\(2\),过来一样物品,价值为\(9\),体积为\(4\),那么它的贡献就是\(9-2*4\)\(2*4\)是刚好满足分数的价值,那么现在多出来\(1\)的价值)。另一个物品价值为\(3\),体积为\(2\),那么它的贡献就是\(3-2*2\)\(2*2\)是刚好满足分数的价值,那么现在少下来\(1\)的价值,多出来\(-1\)的价值)。

其实可以类比比例的性质,我们有比例系数\(k\),将数值用\(k\)表示出来,带入再消去\(k\),整体的比值是不会变化的。

好了吗?不,如果听到这里你就觉得是完全对的话,那说明你还没有深入地理解这个做法(我觉得叫成算法不太妥当,毕竟用的都是现成的),还是犯了最初贪心的毛病,这样取依旧不会是最优。但是这样取绝不会使得可行的解变得不可行。因为你能取正数就取正数,不到负数就肯定满足;因为你取的负数也是当前最小,能抵消掉就肯定抵消掉。相当于是忽略掉数值的大小。也就是说,随着二分的进行,你的解也会越来越优。因为随着解越来越变得难以可行,你的贪心也变得越来越正确。最终的答案带入你的贪心在这个数据中肯定是正确的。这也是二分的单调性所在啊。

简单来说,就是选取\(k\)个数,使它们的和大于等于\(0\)

这让我们对贪心有了一个更广泛的认识,还有这种操作。也许你的贪心在局部会失误,但结合一些方法多次贪心,使得贪心的范围更加精准(在\(01\)分数规划中的体现就是一定可以判断可行性)。当然正负也起到了很大的作用。

你可能感兴趣的:(#149. 01 分数规划)