Эта вики-страница, указанная выше, говорит, что это полная проблема, так что я думаю, что нет хорошего способа ее решить.
Но если вы хотите перебор, я бы предложил сначала отфильтровать «бесполезные» поля.
В вашем примере с помощью простой проверки вы можете отфильтровать 3 и 4, потому что они всегда могут перезаписать на 1 + 2 и 2 + 2. (вы можете сделать это также грубой силой)
Тогда вам нужно выбрать только 3 комбинации, что не должно быть плохо, если вы создаете программу для компании по прокату или отеля ...
(если вы хотите проверить лучшую цену в течение 30 дней, потребуется всего лишь 30 x 15 x 4 операций, что для компьютера не так уж и много.)
Привет WizardOfOdds:
Я пытаюсь научиться решать эту проблему, как 0-1 рюкзак, и я немного растерялся ...
(вы можете просто «затравить» свой «0-1»
Рюкзак "с таким количеством" один день ", как
максимум, который вы хотите найти, как половина
много «двух дней», одна треть
«три дня» и т. д.).
Если я пойму, что если мы хотим найти решение в течение 7 дней, тогда мы думаем как:
7 x 1 день 0/1?
3x 2 дня 0/1?
2x 3 дня 0/1?
1x 4 дня 0/1?
Полагаю, я действительно не понимаю, что / почему
столько «один день», «половина», «третий» ...