なる荷物を1つ選択した後、その荷物より下にある荷物に対して、大きさの総和が以下になるように荷物を選択して価値の総和を最大化するKnapsack問題を考えると、
なる全てのについての、((上記のKnapsack問題の答え)) の最大値が問題の答えです。
愚直に実装すると間に合わないので工夫して考えます。
逆順に見ることを考えます。との数列を両方とも逆順にして、(上の荷物は下に、下の荷物は上になるように並び替えて、)
上から番目の荷物まで見て、大きさの総和が以下になるように荷物を選んだときの価値の総和の最大値
をそれぞれの、について前計算します。
すると、を初期値として、なる荷物それぞれに対し、
←
のように答えを更新することで、でこの問題の答えを求めることができます。