私はコイン1、2、4、10、20、40、100、200、400、1000、2000セントのセットを持っています。特定の金額(<= 6000)を支払う方法がいくつあるか知りたいです。C ++での私の現在の解決策は、動的計画法を使用することです。
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。オーバーフローの問題が原因ですか?