No.626

分枝限定法を使う.

まずは となる荷物は使えないので取り除く.

残りは が大きいものを入れていくのが効率が良さそうなので, の降順でソートしておく.

最初の荷物から順に入れる/入れないを判別していく.

関数 を考える. は入れる/入れないを仮定済みの荷物の状態, を未仮定の荷物の状態とする.

このときの の上界と下界を求める.

上界は線形緩和で求める. 線形緩和すれば貪欲法で求められるので, 計算量は である.

下界は貪欲法で求める.

暫定解をそれまでに求めた最良の解とすれば, 上界が暫定解より小さければ はこれ以上仮定しても無駄なので計算を打ち切る.

下界が暫定解より大きければ暫定解を下界で更新し, さらに仮定を進めて再帰する.