POJ3260 The Fewest Coins(混合背包)
支付对应的是多重背包问题,找零对应完全背包问题。
难点在于找上限T+maxv*maxv,可以用鸽笼原理证明,实在想不到就开一个尽量大的数组。
1 #include <map>
2 #include <set>
3 #include <cmath>
4 #include <queue>
5 #include <cstdio>
6 #include <vector>
7 #include <climits>
8 #include <cstring>
9 #include <cstdlib>
10 #include <iostream>
11 #include <algorithm>
12 using namespace std;
13 const int maxm=10000+120*120+5;
14 int dp_pay[maxm],dp_change[maxm];
15 int N,T,v[105],c[105];
16
17 void multi_knapsack(int n,int W){//多重背包,二进制拆分
18 memset(dp_pay,0x3f,sizeof(dp_pay));
19 dp_pay[0]=0;
20 for(int i=1;i<=N;i++){//转化为完全背包
21 if(c[i]*v[i]>=W){
22 for(int j=v[i];j<=W;j++)
23 dp_pay[j]=min(dp_pay[j],dp_pay[j-v[i]]+1);
24 }
25 else{
26 for(int k=1;c[i]>0;k<<=1){//二进制拆分
27 int x=min(k,c[i]);
28 for(int j=W;j>=v[i]*x;j--)
29 dp_pay[j]=min(dp_pay[j],dp_pay[j-v[i]*x]+x);
30 c[i]-=x;
31 }
32 }
33 }
34 }
35
36 void complete_knapsack(int n,int W){
37 memset(dp_change,0x3f,sizeof(dp_change));
38 dp_change[0]=0;
39 for(int i=1;i<=N;i++){
40 for(int j=v[i];j<=W;j++)
41 dp_change[j]=min(dp_change[j],dp_change[j-v[i]]+1);
42 }
43 }
44
45 int main(){
46 while(~scanf("%d%d",&N,&T)){
47 int maxv=0,W;
48 for(int i=1;i<=N;i++)
49 scanf("%d",&v[i]),maxv=max(maxv,v[i]);
50 for(int i=1;i<=N;i++)
51 scanf("%d",&c[i]);
52 maxv=maxv*maxv;
53 multi_knapsack(N,maxv+T);
54 complete_knapsack(N,maxv);
55 int ans=0x3f3f3f3f;
56 for(int i=0;i<=maxv;i++)
57 ans=min(ans,dp_pay[i+T]+dp_change[i]);
58 if(ans==0x3f3f3f3f)
59 ans=-1;
60 printf("%d\n",ans);
61 }
62 }
POJ3260 The Fewest Coins(混合背包)的更多相关文章
- POJ3260:The Fewest Coins(混合背包)
Description Farmer John has gone to town to buy some farm supplies. Being a very efficient man, he a ...
- POJ3260——The Fewest Coins(多重背包+完全背包)
The Fewest Coins DescriptionFarmer John has gone to town to buy some farm supplies. Being a very eff ...
- POJ 3260 The Fewest Coins(多重背包+全然背包)
POJ 3260 The Fewest Coins(多重背包+全然背包) http://poj.org/problem?id=3260 题意: John要去买价值为m的商品. 如今的货币系统有n种货币 ...
- 洛谷P2851 [USACO06DEC]最少的硬币The Fewest Coins(完全背包+多重背包)
题目描述 Farmer John has gone to town to buy some farm supplies. Being a very efficient man, he always p ...
- poj3260 The Fewest Coins
Description Farmer John has gone to town to buy some farm supplies. Being a very efficient man, he a ...
- POJ 3260 The Fewest Coins(完全背包+多重背包=混合背包)
题目代号:POJ 3260 题目链接:http://poj.org/problem?id=3260 The Fewest Coins Time Limit: 2000MS Memory Limit: ...
- POJ3260The Fewest Coins[背包]
The Fewest Coins Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6299 Accepted: 1922 ...
- The Fewest Coins POJ - 3260
The Fewest Coins POJ - 3260 完全背包+多重背包.基本思路是先通过背包分开求出"付出"指定数量钱和"找"指定数量钱时用的硬币数量最小值 ...
- HDU 3535 AreYouBusy (混合背包)
题意:给你n组物品和自己有的价值s,每组有l个物品和有一种类型: 0:此组中最少选择一个 1:此组中最多选择一个 2:此组随便选 每种物品有两个值:是需要价值ci,可获得乐趣gi 问在满足条件的情况下 ...
随机推荐
- 注解_概念和注解_JDK内置注解
注解: 概念:说明程序的,给计算机看的 注解:用文字描述程序的,给程序员看的 定义:注解(Annotation),也叫元数据.一种代码级别的说明.他是JDK1.5及以后的版本引入的一个特性,与类,接口 ...
- Linux学习系列--用户(组)新增、查看和删除
在实际的工作中,在接触Linux的用户组管理的时候,一般来说都是在系统开建设的时候设置好,root权限由特定的负责人保管用户密码,避免误操作带来不必要的麻烦. 在具体使用的时候,会利用相关的命令设置一 ...
- Vue 配置代理
说明:这里的vue代理是指用vue静态服务器做代理.使用的是 http-proxy-middleware 这个模块(这个模块相当于是node.js的一个插件). 版本: vue-cli 3.0以上 修 ...
- odoo 14 一些常见问题集
1 # 当你往tree或者form视图中增加action的时候 2 # 记住!千万别重名 3 # 一旦重名,Export.Delete.Archive.Unarchive都会消失不见 4 # tree ...
- 使用 Vagrant 在 VirtualBox 安装 Linux 虚拟机
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 导入 2.工具介绍 3.通过Vagrant为VirtualBox安装CentOS 7 4.总结 文章推荐: 关 ...
- 我说MySQL联合索引遵循最左前缀匹配原则,面试官让我回去等通知
面试官: 我看你的简历上写着精通MySQL,问你个简单的问题,MySQL联合索引有什么特性? 心想,这还不简单,这不是问到我手心里了吗? 听我给你背一遍八股文! 我: MySQL联合索引遵循最左前缀匹 ...
- 使用jmh框架进行benchmark测试
性能问题 最近在跑flink社区1.15版本使用json_value函数时,发现其性能很差,通过jstack查看堆栈经常在执行以下堆栈 可以看到这里的逻辑是在等锁,查看jsonpath的LRUCach ...
- Luogu2574 XOR的艺术 (分块)
本是要练线段树的,却手贱打了个分块 //#include <iostream> #include <cstdio> #include <cstring> #incl ...
- 前端React项目遇到【Uncaught SyntaxError: Unexpected token '<'】错误的解决方式
问题描述 前端部署好项目后,打开相应的页面显示一片空白,打开console显示 问题排查思路 理解问题的本质 出现这个错误的原因是浏览器期望得到js文件,但页面却返回了html文件,如图中的js文件点 ...
- SpringBean的实例化
在Spring框架中,想使用Spring容器中的Bean,需要先实例化Bean SpringBean的实例化有3种方式 构造方法实例化 (最常用) 在Java配置类中,写一个构造方法,在这个构造方法中 ...