大纲
1.最优配对
2.任务调整
3.练习
好久没更新了,因为开学了的原因,最近会更新有点慢
话不多说,继续开启c++之旅
1.最优配对
最优配对引入
问题描述: 有N个人要过河,第i个人重量为𝑤 𝑖 。每艘船的最大载重量均为𝐶 ,且最多只能乘两个人,请问最少需要多少艘船才能将所有人一次性运过河。
① 方案1: 30和40共用1艘船, 50和60各使用1艘船,共需要3艘船。
② 方案2: 30和50共用1艘船, 40和60共用1艘船,共需要2艘船。
③ 方案3: 30和60共用1艘船, 40和50共用1艘船,共需要2艘船。方案2和方案3都是最优方案,最少需要2艘船。
【乘船问题】
设i是当前最轻的人,那么i应该跟谁共乘一条船才最优呢?
① 情况1:如果没有人可以和i共乘一条船,那么唯一的方案就是每个人一条船,why?
因为对于任意一个人x,如果他不能和最轻的乘一条船,他就不能和任何人乘一条船。
② 情况2:如果有多个人可以和i做同一条船,那么优先体重最重的那个人j(贪心选择)。
1艘船最多坐2个人,也就是说i最多可以带走一个人,带走最重的,可以使得剩下的
人更容易配对成功。
贪心选择:优先让最轻的和最终的配对,如果最轻的和最重的无法配对,那么最重的自
己乘一条船&#x