HDU's ACM 2069 Coin Change

来源:互联网 发布:勤学网软件下载 编辑:程序博客网 时间:2024/05/20 00:13

原题链接:HDU's ACM 2069 Coin Change


分析:这题为母函数题,较为特殊的地方是硬币数有限制,故而要在各个方案中记录硬币数,超过限定的不再计数。


WA Code:

<span style="font-family:Microsoft YaHei;font-size:14px;">#include <stdio.h>#include <string.h>#define TYPEOFCOINS 5#define MAXNUMOFCOINS 100#define MAXN 250+10const int coins[TYPEOFCOINS] = {1, 5, 10, 25, 50};int coeff1[MAXN][MAXNUMOFCOINS+1]; // 前下标代表金额,后下标代表硬币数int coeff2[MAXN][MAXNUMOFCOINS+1];int res[MAXN];int init(){int i, j, k, l;memset(coeff1, 0, sizeof(coeff1));memset(coeff2, 0, sizeof(coeff2));memset(res, 0, sizeof(res));coeff1[0][0] = 1;for(i=0;i<TYPEOFCOINS;++i){for(j=0;j<MAXN;++j)for(k=0;k*coins[i]+j<MAXN;++k)for(l=0;l+k<=MAXNUMOFCOINS;++l)coeff2[k*coins[i]+j][l+k] += coeff1[j][l];memcpy(coeff1, coeff2, sizeof(coeff1));memset(coeff2, 0, sizeof(coeff2));}for(i=0;i<MAXN;++i)for(j=0;j<MAXNUMOFCOINS;++j)res[i] += coeff1[i][j];res[0] = 1;}int main(){int n;init();while(scanf("%d", &n) != EOF) {printf("%d\n", res[n]);}return 0;}</span>


0 0