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

题目描述

Farmer John has gone to town to buy some farm supplies. Being a very efficient man, he always pays for his goods in such a way that the smallest number of coins changes hands, i.e., the number of coins he uses to pay plus the number of coins he receives in change is minimized. Help him to determine what this minimum number is.

FJ wants to buy T (1 ≤ T ≤ 10,000) cents of supplies. The currency system has N (1 ≤ N ≤ 100) different coins, with values V1, V2, ..., VN (1 ≤ Vi ≤ 120). Farmer John is carrying C1 coins of value V1, C2 coins of value V2, ...., and CN coins of value VN (0 ≤ Ci ≤ 10,000). The shopkeeper has an unlimited supply of all the coins, and always makes change in the most efficient manner (although Farmer John must be sure to pay in a way that makes it possible to make the correct change).

农夫John想到镇上买些补给。为了高效地完成任务,他想使硬币的转手次数最少。即使他交付的硬 币数与找零得到的的硬币数最少。 John想要买T(1<=T<=10000)样东西(2017-7-20 管理员注:这个翻译有问题,实际为要买价值为T的东西)。有N(1<=n<=100)种货币参与流通,面值分别为V1,V2..Vn (1<=Vi<=120)。John有Ci个面值为Vi的硬币(0<=Ci<=10000)。我们假设店主有无限多的硬币, 并总按最优方案找零。

输入输出格式

输入格式:

 

Line 1: Two space-separated integers: N and T.

Line 2: N space-separated integers, respectively V1, V2, ..., VN coins (V1, ...VN)

Line 3: N space-separated integers, respectively C1, C2, ..., CN

 

输出格式:

 

Line 1: A line containing a single integer, the minimum number of coins involved in a payment and change-making. If it is impossible for Farmer John to pay and receive exact change, output -1.

 

输入输出样例

输入样例#1: 复制
3 70
5 25 50
5 2 1
输出样例#1: 复制
3

说明

Farmer John pays 75 cents using a 50 cents and a 25 cents coin, and receives a 5 cents coin in change, for a total of 3 coins used in the transaction.

 

思路比较简单

对john做一次多重背包

对店主做一次完全背包(然而不会写代码)

多重背包用二进制优化

另外,本蒟蒻不怎么懂为什么枚举上界是所有面值相乘再加T,

刚开始写面值乘数量死活RE QWQ...

 

#include<cstring>
#include<cstdio>
#include<cstdlib>
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<22,stdin),p1==p2)?EOF:*p1++)
#define min(a,b) (a<b?a:b)
#define max(a,b) (a<b?b:a)
char buf[1<<22],*p1=buf,*p2=buf;
//#define int long long 
using namespace std;
const int MAXN=5*1e6+10,INF=1e8+10;
inline int read() {char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
int f[MAXN];//恰好为i时的最小花费 
int g[MAXN];//完全背包 
int val[MAXN],num[MAXN];
int N,T,limit=0;
int main() {#ifdef WIN32freopen("a.in","r",stdin);#endifN=read();T=read();for(int i=1;i<=N;i++) val[i]=read();for(int i=1;i<=N;i++) num[i]=read(),limit+=val[i]*val[i];memset(f,0x3f,sizeof(f));memset(g,0x3f,sizeof(g));g[0]=0;f[0]=0;for(int i=1;i<=N;i++)for(int j=val[i];j<=limit;j++)g[j]=min(g[j],g[j-val[i]]+1);for(int i=1;i<=N;i++) {for(int k=1;k<=num[i];k<<=1) {for(int j=limit;j>=val[i]*k;j--)f[j]=min(f[j],f[j - val[i]*k]+k);num[i]-=k;}        if(num[i])for(int j=limit;j>=val[i]*num[i];j--) f[j]=min(f[j],f[j - val[i]*num[i]]+num[i]);    }int ans=INF;for(int i=T;i<=limit;i++)ans=min(ans,f[i]+g[i-T]);ans==INF?printf("-1"):printf("%d",ans);return 0;
}

 

转载于:https://www.cnblogs.com/zwfymqz/p/8782645.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud项目接入华为云Paas平台CES一些注意事项

1.注册华为云账号获取个人中心-》管理我的凭证-》访问密钥-》下载ak&#xff0c;sk密钥。 2.本地项目maven需要配置华为云私服 <profile> <id>nexusProfile</id> <repositories> <repository> <id>cse1</id><url>http://mave…

@Transactional事务不生效问题解决(springboot)

springboot事务不生效的几种解决方案 最近在业务中遇到了很奇怪的场景,在加上 Transactional注解后,插入2条数据,如果第二条出异常了,第一条不会回滚,排查了很久,上网也找资料看了很久,问题得以解决,总结了事务不生效的几点可能的原因: mysql的MyISAM引擎不支持回滚,如果需要自…

springcloud不使用数据库微服务启动异常解决

项目在文件处理微服务不使用数据库时&#xff0c;项目启动异常。 解决办法如下&#xff1a;

NSAttributedStringKey

NSFontAttributeName; //字体&#xff0c;value是UIFont对象 NSParagraphStyleAttributeName;//绘图的风格&#xff08;居中&#xff0c;换行模式&#xff0c;间距等诸多风格&#xff09;&#xff0c;value是NSParagraphStyle对象 NSForegroundColorAttributeName;//文字颜色&a…

fastDFS页面浏览器缓存解决

在使用fastDFS做文件系统时&#xff0c;图片浏览器缓存影响删除结果显示。 解决办法如下: 在fastDFS的容器中的nginx配置禁止浏览器缓存:

埋点测试-移动端/PC端

从下面几个方面来讲一下&#xff1a; 1、为什么要进行埋点测试 埋点&#xff08;是数据采集领域&#xff0c;尤其是用户行为数据采集领域的术语指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。&#xff09;是为了实现app的数据收集和分析&#xff0…

NO.10章 图(遍历、最短路、生成树、拓扑、关键路径)

1. 定义存储 2. 遍历 1&#xff09;DFS 2&#xff09;BFS 3. 最短路径 1&#xff09;Dijkstra 2&#xff09;Bellman-Ford 3&#xff09;SPFA 4&#xff09;Floyd 4. 最小生成树 1&#xff09;性质 2&#xff09;prim 3&#xff09;kruscal 5. 拓扑 1&#xff09…

字符串用法

count()方法 描述 count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。 str.count(sub, start 0,endlen(string)) 参数 sub -- 搜索的子字符串start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。end -- 字符串中结…

OpenResty+Lua+redis+mysql实现高性能高可用限流缓存

OpenResty(又称&#xff1a;ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台.并发性能可在10k-1000k OpenResty安装 1.添加仓库执行命令 yum install yum-utils yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo 2.执行安装 yum …

OpenResty(nginx)限流配置实现

一般情况下&#xff0c;首页的并发量是比较大的&#xff0c;即使有了多级缓存&#xff0c;如果有大量恶意的请求&#xff0c;也会对系统造成影响。而限流就是保护措施之一。 nginx提供两种限流的方式&#xff1a; 一是控制速率 二是控制并发连接数 控制速率 控制速率的方式…

webservice学习总结(一)-- WebService相关概念介绍

一、WebService是什么&#xff1f; 基于Web的服务&#xff1a;服务器端整出一些资源让客户端应用访问&#xff08;获取数据&#xff09;一个跨语言、跨平台的规范&#xff08;抽象&#xff09;多个跨平台、跨语言的应用间通信整合的方案&#xff08;实际&#xff09;二、为什么…

数据同步的解决方案Canal

Canal实现数据同步的原理&#xff1a; 1.是根据模拟mysql slave的主从交互协议&#xff0c;伪装自己是mysql slave&#xff0c;向mysql master发送dump请求。 2.mysql master收到dump请求后,开始推送 binary log给canal 3.canal解析binary log对象&#xff08;原始byte流&am…

TimeSpan格式化字符串格式(摘)

TimeSpan格式化字符串格式(摘) 原文:TimeSpan格式化字符串格式(摘)一直在用DateTime, 却不常用TimeSpan , 今天突然用到了, 发现不知道咋做格式化...百度一下,找到了答案, 在这记录一下, 免得以后找花费时间 以下内容摘抄自 Microsoft Docs 原文地址: https://docs.microsoft.…

关于ElasticSearch处理过滤条件

在用es做搜索时通常会遇到很多条件过滤查询&#xff0c;以及一些复杂的请求参数过滤。 简单以一组数据类型举例。请求参数为: {关键字:关键字&#xff0c;品牌&#xff1a;品牌&#xff0c;分类&#xff1a;分类&#xff0c;规格&#xff1a;{规格1&#xff1a;规格1&#xf…

Layer笔记

官网地址&#xff1a;http://layer.layui.com/hello.html 引入代码 <script src"jQuery的路径"></script> <!-- 你必须先引入jQuery1.8或以上版本 --><script src"layer.js的路径"></script> 1.loading // 开始加载 var ind…

关于feign开启hystrix导致用户鉴权失败

关于feign开启hystrix熔断导致用户鉴权失败的原因是&#xff1a; feign的hystrix熔断默认机制是线程池隔离。而代码在获取用户权限信息时又是线程池处理&#xff0c;所以导致每次获取用户信息为null. 处理办法是&#xff1a; 变更hystrix的隔离策略为信号量策略。 SEMAPHOR…

复习……方法的重载

Lesson Six                         2018-04-20  00:48:57 1.一个项目或工程&#xff0c;一定是由一个一个类构成的。2.类是抽象的&#xff0c;比如建筑图纸。而具体的建筑&#xff0c;是根据图纸建设成的&#xff0c;实际上就是类的实例化3.完成一…

对Kafka的总结

定位&#xff1a;kafka是一款分布式&#xff0c;高吞吐量&#xff0c;基于发布/订阅的消息中间件。 核心组件&#xff1a; broker&#xff1a;kafka服务器&#xff0c;负责消息的存储和转发。 topic&#xff1a;主题&#xff0c;消息的类别&#xff0c;kafka按照topic分类消…

[转]Nginx的负载均衡方式

如果Nginx没有仅仅只能代理一台服务器的话&#xff0c;那它也不可能像今天这么火&#xff0c;Nginx可以配置代理多台服务器&#xff0c;当一台服务器宕机之后&#xff0c;仍能保持系统可用。具体配置过程如下&#xff1a; 1. 在http节点下&#xff0c;添加upstream节点。 upstr…

Ribbon中的负载均衡算法实现

Ribbon响应时间权重负载均衡算法&#xff0c;假设有3台服务器A,B&#xff0c;C响应时间为10&#xff0c;40&#xff0c;80ms。 算法公式&#xff1a;weighsofar 总响应时长- 本服务器平均响应时长 A&#xff1a;0130-10120 B:120130-40210 C:210130-80260 将3个轮询数值放…