POJ 3260 The Fewest Coins(背包问题)
【题目链接】 http://poj.org/problem?id=3260
【题目大意】
给出你拥有的货币种类和每种的数量,商店拥有的货币数量是无限的,
问你买一个价值为m的物品,最少的货币流通数量为多少
【题解】
我们可以计算出买不同价值的物品,在没有找钱情况下的最少用币数量,
记为dp[i],这个可以用多重背包来完成,对于商店来说,我们可以计算出,
对于不同额度的找零,最少用币数量,记为f[i],
我们发现,对于货币流通最少,就是求dp[i+m]+f[i]的最小值,
由鸽巢原理可得我们只要计算maxw*maxw+m的dp值就可以了。
【代码】
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- const int INF=0x3f3f3f3f;
- int m,n,w[110],c[110],dp[24563],f[24563];
- int main(){
- while(~scanf("%d%d",&n,&m)){
- int maxn=0;
- for(int i=1;i<=n;i++)scanf("%d",&w[i]),maxn=max(maxn,w[i]);
- for(int i=1;i<=n;i++)scanf("%d",&c[i]);
- maxn=maxn*maxn+m+1;
- memset(dp,INF,sizeof(dp));
- dp[0]=0;
- for(int i=1;i<=n;i++){
- if(c[i]*w[i]>=maxn){
- for(int j=w[i];j<=maxn;j++)dp[j]=min(dp[j],dp[j-w[i]]+1);
- }else{
- for(int k=1;k<c[i];k<<=1){
- for(int j=maxn;j>=w[i]*k;j--)dp[j]=min(dp[j],dp[j-w[i]*k]+k);
- c[i]-=k;
- }for(int j=maxn;j>=w[i]*c[i];j--)dp[j]=min(dp[j],dp[j-w[i]*c[i]]+c[i]);
- }memset(f,INF,sizeof(f));f[0]=0;
- }
- for(int i=1;i<=n;i++){
- for(int j=w[i];j<=maxn;j++)f[j]=min(f[j],f[j-w[i]]+1);
- }int ans=INF;
- for(int i=0;i<=maxn-m;i++)ans=min(ans,dp[i+m]+f[i]);
- if(ans==INF)ans=-1;
- printf("%d\n",ans);
- }return 0;
- }
POJ 3260 The Fewest Coins(背包问题)的更多相关文章
- POJ 3260 The Fewest Coins(多重背包+全然背包)
POJ 3260 The Fewest Coins(多重背包+全然背包) http://poj.org/problem?id=3260 题意: John要去买价值为m的商品. 如今的货币系统有n种货币 ...
- POJ 3260 The Fewest Coins(完全背包+多重背包=混合背包)
题目代号:POJ 3260 题目链接:http://poj.org/problem?id=3260 The Fewest Coins Time Limit: 2000MS Memory Limit: ...
- POJ 3260 The Fewest Coins(多重背包问题, 找零问题, 二次DP)
Q: 既是多重背包, 还是找零问题, 怎么处理? A: 题意理解有误, 店主支付的硬币没有限制, 不占额度, 所以此题不比 1252 难多少 Description Farmer John has g ...
- poj 3260 The Fewest Coins
// 转载自http://blog.163.com/benz_/blog/static/18684203020115721917109/算法不难看出,就是一个无限背包+多重背包.问题在于背包的范围.设 ...
- POJ 3260 The Fewest Coins 最少硬币个数(完全背包+多重背包,混合型)
题意:FJ身上有各种硬币,但是要买m元的东西,想用最少的硬币个数去买,且找回的硬币数量也是最少(老板会按照最少的量自动找钱),即掏出的硬币和收到的硬币个数最少. 思路:老板会自动找钱,且按最少的找,硬 ...
- The Fewest Coins POJ - 3260
The Fewest Coins POJ - 3260 完全背包+多重背包.基本思路是先通过背包分开求出"付出"指定数量钱和"找"指定数量钱时用的硬币数量最小值 ...
- POJ3260——The Fewest Coins(多重背包+完全背包)
The Fewest Coins DescriptionFarmer John has gone to town to buy some farm supplies. Being a very eff ...
- POJ3260The Fewest Coins[背包]
The Fewest Coins Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6299 Accepted: 1922 ...
- (混合背包 多重背包+完全背包)The Fewest Coins (poj 3260)
http://poj.org/problem?id=3260 Description Farmer John has gone to town to buy some farm supplies. ...
随机推荐
- Python代码规范
一:背景 用于规范化ocp python开发,对于使用python开发的程序使用统一的风格,便于代码的维护 二:python风格规范 分号:不要在行尾加分号,也不要用分号将两条命令放在同一行 括号:宁 ...
- MFC 监控界面上所有文本框值的变化
//控件消息,菜单,按钮等 BOOL CXXDlg::OnCommand(WPARAM wParam, LPARAM lParam) { // TODO: 在此添加专用代码和/或调用基类 int wm ...
- JS学习笔记之页面信息滚动效果
效果截图: 1.无缝滚动效果 JS代码: <script> window.onload=function(){ var oInfobox=document.getElementById(' ...
- 关于javascript中的this 一段小实例深有体会啊
先声明鄙人正在努力的把脚抬进门来,说的都是比较粗浅的知识,但都是我实践中得出的体会,很深刻. 正在自学中挣扎的DOG. 先看段代码: function highlightRows() { if(!d ...
- Navicat Premium mysql
#Sql语句 创建一表格 ),name ),age ),sex )); #添加语句 ,,'男'); ,,'男'); #删除 delete from user3;#user3中所有数据全删 delete ...
- L3-003. 社交集群(并查集)
L3-003. 社交集群 时间限制 1000 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 在社交网络平台注册时,用户通常会输入自己的兴趣爱好, ...
- ACM-ICPC 2018 南京赛区网络预赛 Sum
A square-free integer is an integer which is indivisible by any square number except 11. For example ...
- HDU 4320 Arcane Numbers 1 (数论)
A - Arcane Numbers 1 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- Sequence(ST表)(洛谷P2048)
超级钢琴 知识储备 在做这道题前,我们先要了解一下ST表(一种离线求区间最值的方法) ST表使用DP实现的,其查询复杂度为O(1). 那么我们怎么用DP实现呢?? 首先,我们设立一个状态f[i][j] ...
- .NET中zip的压缩和解压
在.NET可以通过多种方式实现zip的压缩和解压:1.使用System.IO.Packaging:2.使用第三方类库:3.通过 System.IO.Compression 命名空间中新增的ZipArc ...