ウィキペディアでは、ナップザックのアルゴリズムは次のとおりです。
for i from 1 to n do
for j from 0 to W do
if j >= w[i] then
T[i, j] := max(T[i-1, j], T[i-1, j-w[i]] + v[i]) [18]
else
T[i, j] := T[i-1, j]
end if
end for
end for
そして、私がオンラインで見つけたすべての例で同じ構造です。私が理解できないのは、おそらく最大値がより小さなナップザック
に由来するという事実をこのコードがどのように考慮しているのかということです。たとえば、ナップザックの容量が 8 の場合、おそらく最大値は容量 7 (8 - 1) から得られます。
おそらく最大値が小さなナップザックから来ていると考えるロジックはどこにも見つかりませんでした。これは間違った考えですか?