dp+[i][j]:=前からi番目までの荷物を見て,重さの総和がjであるときの価値の総和の最大値
dp−[i][j]:=後ろからi番目までの荷物を見て,重さの総和がjであるときの価値の総和の最大値
とします.この2つの配列の各要素は動的計画法によりO(NW)で計算することができます.
i番目の荷物を含めない場合の計算方法を考えてみましょう.
これは,前から(i−1)番目まで荷物を見た結果と,
後ろから(N−i)番目まで荷物を見た結果より計算することができます.
また,前から(i−1)番目まで見て重さの総和がkだった場合,
後ろから(N−i)番目まで見た時に許容される容量の最大値は(W−k)となります.
よって各iについて以下の値を計算したものが答えとなります.
- max0≤k≤W(dp+[i−1][k]+dp−[N−i][W−k])
問題全体としての時間計算量はO(NW)でこの問題の条件下では十分高速です.