У меня есть набор монет 1,2, 4, 10, 20, 40, 100, 200, 400, 1000, 2000 центов. Я хочу узнать, сколько способов заплатить за определенную сумму (< = 6000). Мое текущее решение в С ++ с использованием динамического программирования нижеследовало:Подсчитайте количество способов внесения изменений
long long d[6010];
int coin[] = {1, 2, 4, 10, 20, 40, 100, 200, 400, 1000, 2000};
d[0] = 1;
for (int i = 0; i < 11; i++) { // iterate through all coins
for (int j = 1; j <= 6000; j++)
d[j] += d[j - coin[i]];
printf("%lld\n", d[20]);
Однако мой вывод некорректный: -956301262. Это из-за проблемы с переполнением?
На первом месте это не код C++, но C. – 2013-03-06 06:57:23
'j - coin [i]' может выйти negatvie. – Pubby
Спасибо @Pubby за ваш ответ. Я смог устранить проблему. –