POJ 3260 The Fewest Coins

题目地址【POJ 3260 The Fewest Coins】
题意:John要去买价值为m的商品. 现在的货币系统有n种货币,对应面值为val[1],val[2]…val[n]. 然后他身上每种货币有num[i]个. John必须付给售货员>=m的金钱, 然后售货员会用最少的货币数量找钱给John.

问你John的交易过程中, 他给售货员的货币数目+售货员找钱给他的货币数目 的和最小值是多少?
思路:
将付钱和找钱看做两各部分分别是多重背包问题和完全背包问题,找到在大于等于物品价格的价钱下最少的付钱硬币数和找钱硬币数加到一起的最小值即可。
AC代码:

/*
** Author:skj
** Time:7-30
** function:混合背包 最少的硬币 http://poj.org/problem?id=3260
*/
#include <iostream>
#include <cstring>
#define INF 0x3f3f3f3f
using namespace std;const int pay = 10000+120*120+5;
const int change = 120*120+5;
const int maxm = 120 +1;
int dp_pay[pay];
int dp_change[change];
int v[maxm];
int c[maxm];
int num[pay];
void multi_knapsack(int n,int m)
{dp_pay[0] = 0;for(int i = 1; i <= n; i++){memset(num,0,sizeof(num));for (int j = v[i]; j <= m; j++){if(j >= v[i]&&num[j-v[i]] < c[i]){dp_pay[j] = min(dp_pay[j],dp_pay[j - v[i]] + 1);num[j] = num[j - v[i]] + 1;}}}
}
void complete_knapsack(int n, int m)
{dp_change[0] = 0;for(int i = 1; i <= n; i++){for(int j = v[i]; j <= m; j++){dp_change[j]=min(dp_change[j],dp_change[j-v[i]] + 1);}}
}
int main()
{//  freopen("in.txt","r",stdin);
//  freopen("out.txt","w",stdout);cin.sync_with_stdio(0);cin.tie(0);memset(dp_pay,INF,sizeof(dp_pay));memset(dp_change,INF,sizeof(dp_change));int n, m;cin >> n >> m;int maxv = 0;for(int i = 1; i <= n; i++){cin >> v[i];maxv = max(maxv,v[i]);}maxv *= maxv;for(int i = 1; i <= n; i++){cin >> c[i];}multi_knapsack(n,m + maxv);complete_knapsack(n,maxv);int ans = INF;for(int i = 0; i <= 120*120; i++){ans = min(ans,dp_pay[i+m]+dp_change[i]);}if(ans == INF){cout << -1 << endl;}else{cout << ans << endl;}return 0;
}

【题目记录】——POJ 3260 The Fewest Coins 混合背包相关推荐

  1. poj 3260 The Fewest Coins(多重背包+完全背包)

    http://poj.org/gotoproblem?pid=3260 (1)多重背包的处理方式:转化为分组背包(1,2,4,8,余数).具体细节参见代码: scanf("%d", ...

  2. POJ 3260 The Fewest Coins 最少硬币个数(完全背包+多重背包,混合型)

    题意:FJ身上有各种硬币,但是要买m元的东西,想用最少的硬币个数去买,且找回的硬币数量也是最少(老板会按照最少的量自动找钱),即掏出的硬币和收到的硬币个数最少. 思路:老板会自动找钱,且按最少的找,硬 ...

  3. hdu-2844 Coins (混合背包+二进制优化)

    HDU链接 文章目录 题目描述: 题意: 题解 (代码) 题目描述: 输入描述: 输出描述: For each test case output the answer on a single line ...

  4. 洛谷P2851 [USACO06DEC]最少的硬币The Fewest Coins(完全背包+多重背包)

    题目描述 Farmer John has gone to town to buy some farm supplies. Being a very efficient man, he always p ...

  5. 【POJ3260】The Fewest Coins 多重背包+完全背包

    A来B处买东西,价值M元,有N种钱,每种钱A有一定数量,而B有无限数量. 求最少用多少张钞票可以满足交易,比如样例,A出50+25,B找5,即可满足,需要3张. A用多重背包转移状态,B用完全背包. ...

  6. [USACO06DEC]The Fewest Coins G(混合背包)

    [USACO06DEC]The Fewest Coins G 题目描述 Farmer John has gone to town to buy some farm supplies. Being a ...

  7. The Fewest Coins (混合背包)

    有的物品只可以取一次或不取(基本的0-1背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包),就是混合背包问题. The Fewest Coins 题意: 农夫John ...

  8. 洛谷P2851 [USACO06DEC]The Fewest Coins G 题解

    洛谷P2851 [USACO06DEC]The Fewest Coins G 题解 题目链接:P2851 [USACO06DEC]The Fewest Coins G 题意: Farmer John ...

  9. The Fewest Coins(多重背包+完全背包)

    The Fewest Coins(多重背包+完全背包) Farmer John has gone to town to buy some farm supplies. Being a very eff ...

最新文章

  1. Python 判断本地python 本地版本2x or 3x
  2. 在MySQL数据库中,这4种方式可以避免重复的插入数据!
  3. C#Project不生成.vhost.exe和.pdb文件的方法
  4. struts2.1.6教程七、国际化
  5. tensorflow实现svm iris二分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)...
  6. Myeclipse中Tomcat的两种部署方式
  7. pg_upgrade升级数据库9.1.1-9.4.5
  8. laravel数据迁移问题
  9. python爬取小说基本信息_Python爬虫零基础实例---爬取小说吧小说内容到本地
  10. 如何用python处理缺失值_用Python处理数据集中的缺失值
  11. 问题十三:怎么用ray tracing画个球
  12. Redis入门(windows)
  13. 数据可视化——tableau 数据报表样例(报表模板)二
  14. flash对联广告代码: 两边显示 不移动 可关闭
  15. 金蝶产品虚拟化解决方案
  16. uva :10123 - No Tipping(dfs + 几何力距 )
  17. intel linux核显性能,Intel UHD Graphics 630 核显性能解析
  18. 无法进入BIOS解决
  19. 反光衣穿戴识别检测系统 OpenCV
  20. linux系统命令make.clean的用法讲解

热门文章

  1. 泰国地址书写的一般格式
  2. 分布式系统里session同步
  3. yii2 设置定时任务
  4. 无线高清影音传输方案
  5. MathWorks MATLAB R2021b Mac(商业数学软件)
  6. java毕业设计‘网上宠物店(附源码、数据库)
  7. 作者专访 | 从受益者到贡献者,朱凯的 ClickHouse 升级之路
  8. python牛顿法解非线性方程组_牛顿迭代法解非线性方程组(MATLAB版)
  9. oppo r9崩溃问题PopupViewContainer{381afa90 V.E..... ......I. 0,0-0,0} not attached to window manager
  10. 易写作IOS隐私政策