仕様が必要とする課題を完了しました:
- 再帰的な解決策
- 容量 <= 100
- 値の長さ <= 25
- パラメーターは容量とインデックスのみ
- 値の繰り返しが許可されています
私はビンの梱包とナップザックの問題について何時間もかけて読んできました。
以下は機能しますが、非常に非効率的です。十数個の値でスタック オーバーフローが発生します。非常に非効率的で、拡張性がなく、どこから始めればよいかわかりません。
提案をいただければ幸いです。はい、これは学業の課題ですが、あきらめて B を獲得するよりも、問題を洗い流したほうがよいでしょう。
public void calculateCombinations(int capacity, int index) {
count++;
if(index < values.length) {
if(values[index] <= capacity) {
currentSolution.addLast(index);
if(values[index] == capacity)
flushSolution();
else
capacity -= values[index];
}
calculateCombinations(capacity, index + 1);
} else
if(currentSolution.peekLast() != null)
calculateCombinations(capacity + values[currentSolution.peekLast()], currentSolution.removeLast() + 1);
}