Доброго времени, CF! Мне не к кому обратиться, кроме как к вам и прошу помощи с решением этой задачи на ДП. Я написал решение, но как назло она не взяла только 1 тест. Мое решение на pastebin:
P.S. Тест на котором он дает неверный ответ у меня:
4 5
1 1 1 1
Я дебажил, я пытался, я понял в каком случае возникает ошибка, но исправить так и не смог.
У Вас неверная база динамики.
Когда Вы не рассматривали ни одного предмета, Вы не можете собрать никакую сумму, за исключением нуля (использовав 0 предметов). У Вас же получается, что можно взять ровно один предмет два раза.
Я понимаю, но не совсем. Если я правильно понял вас, то знайте, я сдавал такое же решение, только:
1) Когда вводил значения присваивал в массиве dp[arr[i]] единицу
2) Считал до нуля не включительно
Но все равно получалось также, как и сейчас.
Если можно, то объясните подробнее! Спасибо.
То, что Вы заранее делаете
dp[arr[i]] = 1
— это значит, что можно в самом начале взять один предмет, но он никуда не денется из набора доступных предметов, и его можно будет взять потом еще раз.Я бы Вам посоветовал вначале написать двумерную динамику:
dp[i][j]
— наименьшее количество предметов, которое нужно взять для того, чтобы собрать суммуj
, при этом можно брать только первыеi
предметов. Как ни странно, то, что Вы пишете — это попытка оптимизировать потребление памяти в этой самой динамике, только вот делаете Вы это неправильно.Если сделаешь тест
то твой код выведет ответ
2
вместо0
, как и говорил AlexanderBolshakovПравильно будет вот так
так приведенный вами код тоже не верный
Написал, проверил, ОК...
вот код посмотри, может ты забажил где то?
Вроде так, потести: http://paste.ubuntu.com/12896693/
не понимаю, мой код делает равносильное вашему, только у вас при вводе, и он зашел на все 51, а у меня нет
Не зря же ты новичок а я специалист))))