Holding Bin-Laden Captive! hdoj 1085 (母函数初学,其他简便方法)
2016-04-26 20:31
411 查看
Holding Bin-Laden Captive! hdoj 1085 (母函数初学,其他简便方法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1085题目大意:给你1,2,5元的硬币数量,求没办法组成的最小数。
非母函数求解,可见如果可以分成三种情况:1.没有1元的就最小为1;
2.如果1,2没办法组成1-4所有的数,那轮不到用5就结束了,此时最小为a+b*2+1;
3.另外可以组成1-4则,在最大数a+b*2+c*5的数均可得到。
ac代码
#include <stdio.h> #include <string.h> #include <algorithm> #include <iostream> using namespace std; int main() { int a,b,c; while(cin >> a >> b >> c) { if(a==0 && b==0 && c==0) break; if(a == 0) printf("1\n"); else if(a+b*2 < 4) printf("%d\n",a+b*2+1); else printf("%d\n",a+b*2+c*5+1); } return 0; }
用母函数的话,既然是初学,我们先了解下母函数
可以看下我转载的一篇关于母函数的文章。
http://blog.csdn.net/qq_33199236/article/details/51253524
关于这一题的话:其母函数应该为(1+x^1+x^2+….x^a) * (1+x^2+x^4+….x^(2b)) * (1+x^5+x^10+…+x^(5c));
ac代码
#include <stdio.h> #include <string.h> #include <algorithm> #include <iostream> using namespace std; int c1[10000],c2[10000]; int main() { int a,b,c; while(cin >> a >> b >> c) { if(a==0 && b==0 && c==0) break; memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2)); for(int i=0;i<=a;i++) c1[i] = 1; // 模拟前两个式子 for(int i=0;i<=a;i++) for(int j=0;j<=2*b;j+=2) c2[i+j]+=c1[i]; for(int i=0;i<=a+2*b;i++) c1[i]=c2[i]; memset(c2,0,sizeof(c2)); for(int i=0;i<=a+2*b;i++) for(int j=0;j<=5*c;j+=5) c2[i+j]+=c1[i]; int i; for(i=0;i<=a+2*b+5*c;i++) { if(c2[i] == 0) break; } printf("%d\n",i); } return 0; }
相关文章推荐
- 每日站立会议(九)
- iOS 写入文件保存数据的方式
- 数质数
- LeetCode 49. Group Anagrams
- SASS如何实现PX转REM
- python:有序字典与嵌套字典
- poj2828Buy Tickets
- 数据结构实验报告 栈和队列
- 第六次作业阶段一 学生成绩录入系统设计与实现
- HDU 3032 Nim or not Nim Nim博弈 规律
- kohana 框架简单小结
- 访问文件和目录
- Visual Studio 2012 IDE 对C/C++显示混乱
- 正则表达式拾贝
- 云适配
- 教你App如何上架应用宝----腾讯开放开发平台
- C字符串函数系列
- View的可见与不可见 的visibility的数值
- 反射——Reflection
- 团队开发个人总结08