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 问在满足条件的情况下 ...
随机推荐
- 造!又有新的生产力语言了「GitHub 热点速览 v.22.30」
作者:HelloGitHub-小鱼干 你还记得那些 PHP 开发都去哪了吗?转 Golang 了!移动端现在流行什么?Flutter 编程.现在谷歌带着新的生产力语言来了,Carbon,代号:C++ ...
- .Net之时间轮算法(终极版)定时任务
TimeWheelDemo 一个基于时间轮原理的定时器 对时间轮的理解 其实我是有一篇文章(.Net 之时间轮算法(终极版))针对时间轮的理论理解的,但是,我想,为啥我看完时间轮原理后,会采用这样的方 ...
- 精心总结十三条建议,帮你创建更合适的MySQL索引
上篇文章讲到使用MySQL的Explain命令可以分析SQL性能瓶颈,优化SQL查询,以及查看是否用到了索引. 我们都知道创建索引可以提高查询效率,但是具体该怎么创建索引? 哪些字段适合创建索引? 哪 ...
- Java基础 | Stream流原理与用法总结
Stream简化元素计算: 一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream: ...
- 面试突击74:properties和yml有什么区别?
properties 和 yml 都是 Spring Boot 支持的两种配置文件,它们可以看作是 Spring Boot 在不同时期的两款"产品".在 Spring Boot 时 ...
- java-servlet-转发AND路径
转发: a) 什么是转发?一个web组件将未完成的任务交给另一个web组件继续做.通常是一个servlet将数据获取之后转交给jsp进行展现.注:web组件值得是servlet或者jsp b) 如何转 ...
- Spring 05: 用DI(依赖注入)优化Spring接管下的三层项目架构
背景 用注解改造前面Spring博客集里(指 Spring 02)Spring接管下的三层项目架构 对前面Spring博客集里(指 Spring 04)@Controller + @Service + ...
- K8S中部署apisix(非ingress)
不使用pvc的方式在K8S中部署apisix-gateway 简介 因为公司项目准备重构,现在做技术储备,之前公司项目使用的ocelot做网关,ocelot是.net平台下的一个网关,也是很不错,但是 ...
- 【java】学习路线5-public和private、构造方法、this关键字、封装对象、static关键字、main方法结构解析
//一个教务管理系统//知识点清单/*public & private 的区别一个是公开的,一个是私有的,作用域不一样,访问的权限不一样咯如果是用private修饰,则调用者只可以是在当前的作 ...
- 基于开源方案构建统一的文件在线预览与office协同编辑平台的架构与实现历程
大家好,又见面了. 在构建业务系统的时候,经常会涉及到对附件的支持,继而又会引申出对附件在线预览.在线编辑.多人协同编辑等种种能力的诉求. 对于人力不是特别充裕.或者项目投入预期规划不是特别大的公司或 ...