POJ 1276 Cash Machine
来源:互联网 发布:drums架子鼓软件下载 编辑:程序博客网 时间:2024/06/01 07:51
题意
有各种不同面值的货币,每种面值的货币有不同的数量,请找出利用这些货币可以凑成的最接近且小于等于给定的数字cash的金额。
分析
多重背包,但由于只是是否存在的问题,所以可以用类似完全背包的方法,但这个的正确性暂时不会证明
代码
#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int MAXN=10,MAXM=100000;int cash,n,c[MAXN+3],d[MAXN+3],cnt[MAXM+3],opt[MAXM+3];bool input(){ if(!(cin>>cash>>n))return false; for(int i=1;i<=n;i++)cin>>c[i]>>d[i]; return true;}int dp(){ memset(opt,0,(cash+3)*sizeof(int));//数组较大,不要直接用sizeof(opt) for(int i=1;i<=n;i++){ memset(cnt,0,(cash+3)*sizeof(int));//cnt记录当前钞票在不同现金要求最优解下的使用张数 for(int j=d[i];j<=cash;j++){ if(cnt[j-d[i]]+1<=c[i]&&opt[j-d[i]]+d[i]>opt[j]){//若还可以用,且更优 opt[j]=opt[j-d[i]]+d[i]; cnt[j]=cnt[j-d[i]]+1; } } } return opt[cash];}int main(){ while(input())cout<<dp()<<endl; return 0;}
0 0
- poj 1276 Cash Machine
- poj 1276 Cash Machine
- poj 1276Cash Machine
- POJ 1276 Cash Machine
- poj 1276 Cash machine
- poj 1276 Cash Machine
- poj 1276 Cash Machine
- POJ 1276 Cash Machine
- POJ 1276 Cash Machine
- POJ 1276 Cash Machine
- poj 1276 Cash Machine
- POJ-1276Cash Machine
- POJ 1276 cash machine
- POJ 1276 Cash Machine
- POJ 1276 Cash Machine
- POJ 1276 Cash Machine
- POJ 1276 Cash Machine
- POJ-1276-Cash Machine
- OC文件操作之按字节拷贝文件
- java基础3.2.6
- VS2010调试JM8.6
- java学习&复习 2015/07/16
- linux常用指令(新手总结)
- POJ 1276 Cash Machine
- c_动态内存分配
- SpringMVC——接收请求参数和页面传参
- HDU 5113 Black And White(DFS+剪枝)
- Hadoop map任务个数分析
- 关于NSString的练习题
- 【高级算法】单纯形法求解线性规划问题(C++实现)
- HTML5第三弹:亦酷亦萌的网络拓扑图
- opencv cvSplit cvMerge