hdu 1085 面值为1.2.5的硬币不能组成的最小面值
2015-08-12 11:25
513 查看
给定面值为1、2、5的硬币的数量,求不能组成的钱的最小面值。
母函数不会,用dp做的,其实就是多重背包。
母函数不会,用dp做的,其实就是多重背包。
#include<bitset> #include<map> #include<vector> #include<cstdio> #include<iostream> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<stack> #include<queue> #include<set> #define inf 0x3f3f3f3f #define mem(a,x) memset(a,x,sizeof(a)) using namespace std; typedef long long ll; typedef pair<int,int> pii; inline int in() { int res=0; char c; while((c=getchar())<'0' || c>'9'); while(c>='0' && c<='9')res=res*10+c-'0',c=getchar(); return res; } const int N=10006; int a ; int v[4]; int w[4]; int num ; //开小了 int main() { while(~scanf("%d",&w[1])) { w[2]=in(),w[3]=in(); v[1]=1,v[2]=2,v[3]=5; if(w[1]+w[2]+w[3]==0)break; mem(a,0); a[0]=1; for(int i=1;i<=3;i++) //dp多重背包做的 { mem(num,0); for(int j=v[i];j<10000;j++) //注意j的开始 { if(!a[j] && a[j-v[i]] && num[j-v[i]]<w[i]) { a[j]=1; num[j]=num[j-v[i]]+1; } } } for(int i=1;i<10000;i++) { if(!a[i]) { printf("%d\n",i); break; } } } return 0; }
相关文章推荐
- POJ 1478
- 字符串hash函数
- android Process 18869 exceeded cursor quota 100, will kill it
- 权限拦截器
- 字符串哈希函数
- OC学习笔记五 内存管理(property 参数)
- 轴的网格划分
- Roman to Integer
- iOS规范化时间格式,object-C计算指定时间与当前的时间差
- spring4+hibernate4配置过程中遇到的问题
- 自动构建工具Grunt
- oracle中查看用户权限
- http请求部分常见的状态码
- Magento SOAP API V2 开放接口修改订单状态
- 破解时常用的汇编指令
- JSON的三种解析方式
- 教你如何绘制圆形头像
- android关于GPS hal层的分析
- easyui 窗口的onBeforeClose 使用
- 类的静态成员及静态成员函数