题解 P1094 【纪念品分组】
贪心算法并不难,难的是证明。 --- 杨科洛夫斯基(heidoudou)
贪心算法:先对数组从小到大排序,用 i = 1, j = n 指针指向首尾元素; 如果 j-- ;如果 i--, j--。 如此重复直到 “取完” 所有元素。
贪心算法证明: 对于 a[i...j] 问题,如果存在最优解
- 如果
a_i + a_j > w ,a_j 也不可能与其他任何a_k ,i < k < j 一组。a_j 只能单独一组。这是符合贪心选择性质的。 - 如果
a_i + a_j \leq w , 在最优解中,a_j 并不与a_i 一组,-
-
-
a_j$ 与 $a_k$ 一组,$a_i$ 单独一组,交换 $a_i$ 和 $a_k$, 不难看出 $S' = S -
-
至此,我们证明了问题的某个最优解可以通过上述贪心选择过程得到。
下面证明 贪心选择加子问题的最优解 为全局最优解。
设有 a[i...j]问题(记为
证毕。
写的啰嗦了一点, 但是读懂这些证明以及为什么这样证明对理解贪心算法大有裨益。
光知道贪心,贪心为什么可以得到最优解,你证明过么?