一 问题描述:有一批共个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集装箱i的重量为Wi,且装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上这2艘轮船。如果有,找出一种装载方案。
容易证明:如果一个给定装载问题有解,则采用下面的策略可得到最优装载方案。
(1)首先将第一艘轮船尽可能装满;
(2)将剩余的集装箱装上第二艘轮船。
二:
(1)解决装载问题的优先队列,将扩展节点的当前装载的重量(Ew)加上剩余集装箱的总重量 (r[i]) 作为优先级,从优先级队列中出队列。
(2)为了方便找到最优的分配方法,在每一个节点设置指向父节点的指针,当算法走到第 n+1层就可以停止寻找,因为当前扩展节点队列 而 i = n+1 时,说明了当前的优先级 uweight最高,就是说 Ew +r[n+1]最大,而r[n+1] =0 , 所以Ew要大于队列中剩余的所有的Ew +r[i] ;
#include <iostream>
#include <algorithm>
usi