杭电OJ——1248 钱币兑换问题(母函数解答)
2013-01-19 19:11
274 查看
钱币兑换问题
Problem Description在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
Input
每行只有一个正整数N,N小于32768。
Output
对应每个输入,输出兑换方法数。
Sample Input
2934 12553
Sample Output
718831 13137761
Author
SmallBeer(CML)
Source
杭电ACM集训队训练赛(VII)
Recommend
lcy
这是一道典型的母函数应用问题,直接套用母函数模版就可以解答出来,不带有多少技术含量!关于母函数的详细解答,请点击这里!http://blog.csdn.net/lishuhuakai/article/details/8044431
直接发代码:
/* //典型的穷举法 #include<iostream> using namespace std; int main() { int x,y,z,n; int num; while(cin>>num && num>0) { n=0; for(x=0;x<=num;x++) for(y=0;y<=num/2;y++) for(z=0;z<=num/3;z++) if(x+2*y+3*z==num) n++; cout<<n<<endl; } return 0; } */ //上面的穷举法太慢,我的电脑足足跑了30秒才有答案,坑啊! //套用母函数模版 #include<iostream> using namespace std; const int MAX=32768; int c1[MAX+1],c2[MAX+1]; int main() { int n,j,i,k,num; for(i=0;i<=MAX;i++) { c1[i]=1;c2[i]=0; } for(i=2;i<=3;i++) { for(j=0;j<=MAX;j++) for(k=0;k+j<=MAX;k=k+i) { c2[j+k]+=c1[j]; } for(j=0;j<=MAX;j++) { c1[j]=c2[j]; c2[j]=0; } } while(scanf("%d",&num)!=EOF) { printf("%d\n",c1[num]); } return 0; }
相关文章推荐
- 【杭电oj】1284 - 钱币兑换问题(母函数打表)
- 钱币兑换问题(杭电1284)(母函数)
- 钱币兑换问题(杭电1284)(母函数)
- 母函数简介及简单使用(附HDU 1284 钱币兑换问题 解题报告)
- HDU 1284 钱币兑换问题(普通母函数)
- hdu 1284 钱币兑换问题 (递推 || DP || 母函数)
- 钱币兑换问题(母函数)
- hdu 钱币兑换问题(母函数)
- 杭电1284 钱币兑换问题(完全背包)
- 钱币兑换问题(母函数)
- hdu 钱币兑换问题 1248
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
- 杭电 1284 钱币兑换问题
- hdu 1284 钱币兑换问题(完全背包 母函数)
- HDU 1284 钱币兑换问题(母函数,完全背包)
- HDU1284钱币兑换问题( 母函数打表)
- 杭电 1284 钱币兑换问题【完全背包求方案总数】
- 钱币兑换问题(母函数)
- HDOJ 题目1084 钱币兑换问题(母函数,打表)
- HDOJ 题目1284 钱币兑换问题(母函数,打表)