#include <stdio.h>
int ways(int a, int d[], int n)
{
int dp[a+1];
int i,j;
for(i=0;i<=a;i++)
dp[i]=0;
dp[0]=1;
for(i=0;i<n;i++)
{
for(j=d[i];j<=a;j++)
{
dp[j] += dp[j-d[i]];
}
}
return dp[a];
}
int main()
{
int amount, original, i, count;
int d[] = {500,200,100,50,20,10,5,2,1};
original = amount;
for (i = 0; i < 9; i++)
{
count = amount / d[i];
amount = amount % d[i];
printf("%d : %d\n", d
[i
], count
);
}
printf("distinct ways = %d\n", ways
(original
, d
,9));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgoJaW50IHdheXMoaW50IGEsIGludCBkW10sIGludCBuKQoJeyAKCQkKCQlpbnQgZHBbYSsxXTsKCQlpbnQgaSxqOwoJCQoJCWZvcihpPTA7aTw9YTtpKyspCgkJICBkcFtpXT0wOwoJCSAgCgkJICBkcFswXT0xOwoJCSAgCgkJICAKCQlmb3IoaT0wO2k8bjtpKyspCgkgICAgICB7CgkgICAgICAJCgkgICAgICAJZm9yKGo9ZFtpXTtqPD1hO2orKykKCSAgICAgIAl7CgkgICAgICAJCWRwW2pdICs9IGRwW2otZFtpXV07CgkgICAgICAJfQoJICAgICAgfQoJICAgICAgcmV0dXJuIGRwW2FdOwoJICAgICAgfQoJICAgICAgCgkKCSAgICBpbnQgbWFpbigpCgkgICAgewoJICAgIAkgaW50IGFtb3VudCwgb3JpZ2luYWwsIGksIGNvdW50OwoJICAgIAkgaW50IGRbXSA9IHs1MDAsMjAwLDEwMCw1MCwyMCwxMCw1LDIsMX07CgkgICAgCSAKCSAgICAJIAoJICAgIAkgc2NhbmYoIiVkIiwgJmFtb3VudCk7CgkgICAgCSAKCSAgICAJIAoJICAgIAkgb3JpZ2luYWwgPSBhbW91bnQ7CgkgICAgCSAKCSAgICAJIAoJICAgIAkgZm9yIChpID0gMDsgaSA8IDk7IGkrKykKCSAgICAJIHsKCSAgICAJIAkKCSAgICAJIAkKCSAgICAJIAljb3VudCA9IGFtb3VudCAvIGRbaV07CgkgICAgCSAJYW1vdW50ID0gYW1vdW50ICUgZFtpXTsKCSAgICAJIAkKCSAgICAJIAkKCSAgICAJIAlwcmludGYoIiVkIDogJWRcbiIsIGRbaV0sIGNvdW50KTsKCSAgICAJIAoJICAgIAkgfQoJICAgIAkgCgkgICAgCSBwcmludGYoImRpc3RpbmN0IHdheXMgPSAlZFxuIiwgd2F5cyhvcmlnaW5hbCwgZCw5KSk7CgkgICAgCSAKCSAgICAKCXJldHVybiAwOwp9Cg==