⚠️ 三个数摆在一起看
同一批物品、同一个容量,一次输出三个数:0-1 贪心 / 0-1 最优 / 可切开的贪心。 这三个数就是"什么时候该换 DP"的全部答案。
交换论证在证明什么
交换论证要说明的是【0】。
交换论证的一步是怎么走的
交换论证的每一步是【0】。
把一处逆序换过来
四个任务耗时 [4, 1, 3, 2],前两个是一处逆序(大的排在小的前面)。把它俩换过来,看总等待时间的变化。运行下面这段程序: def wait(order): t = 0 s = 0 for x in orde
穷举 24 种顺序,最小是多少
四个任务一共有 24 种排法。运行下面这段程序: from itertools import permutations def wait(order): t = 0 s = 0 for x in order:
写出总等待时间
补全 wait:按给定顺序做任务,把每个任务的完成时刻加起来。对 [4, 1, 3, 2] 输出结果。
写出"交换一处相邻逆序"
补全 fix_one:从左往右找第一处相邻逆序(前面的比后面的大),把这两个换过来,返回新顺序。 把换之前和换之后的总等待时间拼起来输出。
⚠️ 穷举验证:排序的结果就是最小
把四个任务的 24 种排法全跑一遍,取出最小的总等待时间;再算一遍按耗时排好的结果。 两个数拼起来输出(穷举的在前)。
⚠️ 把交换论证写成一段能跑的代码
交换论证的核心是一句话:换掉一处相邻逆序,总等待时间不会变大。 把 24 种排法全过一遍验证两件事: 所有相邻逆序换过来,总和都不变大 → 应为 True 所有相邻正序换过来,总和也都不变大 → 应为 False 两个判断拼起来输出。
拿到一个新问题,先做什么
想用贪心解一个新问题,第一件事是【0】。