[USACO13NOV]No Change
题目大意:
你有k(k<=16)个硬币,每个硬币都有自己的面值。
现在你要给n件商品付钱,每件商品也有自己的价格。
然而老板是个奸商,他绝对不会给你找钱。
你每次付钱只能用一个硬币,但是你可以一次性买很多商品。
问你最后最多还能留下多少钱。
思路:
状压DP。
f[i]表示状态为i时能买的商品数,i表示你用了哪些硬币。
从小到大枚举每个状态i,然后枚举状态i中的硬币j,是这次付款用的硬币。
二分找一下这些硬币最多能买前面连续的多少个商品。
如果j不在i中,就算作最后剩下的硬币。
#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int K=,N=;
int v[K],sum[N],f[<<K];
int main() {
const int k=getint(),n=getint();
for(register int i=;i<k;i++) {
v[i]=getint();
}
for(register int i=;i<=n;i++) {
sum[i]=sum[i-]+getint();
}
int ans=-;
for(register int i=;i<(<<k);i++) {
int rem=;
for(register int j=;j<k;j++) {
if(i&(<<j)) {
f[i]=std::max(f[i],int(std::upper_bound(&sum[],&sum[n+],sum[f[i^(<<j)]]+v[j])-sum-));
} else {
rem+=v[j];
}
}
if(f[i]==n) {
ans=std::max(ans,rem);
}
}
printf("%d\n",ans);
return ;
}
[USACO13NOV]No Change的更多相关文章
- 状压 DP:[USACO06NOV] Corn Fields,[USACO13NOV] No Change
[USACO06NOV] Corn Fields (试题来源:Link ) 题目描述 Farmer John has purchased a lush new rectangular pasture ...
- Luogu3092:[USACO13NOV]No Change
题面 传送门 Sol 状压一下\(k\),\(f[S]\)表示用过的硬币集合为\(S\)能买到的物品个数 # include <bits/stdc++.h> # define RG reg ...
- 解题:USACO13NOV No Change
题面 在朴素中透着一点新意的状压DP 一个很暴力的思路是枚举位置,状态和硬币,每次二分出向前最多能买到哪里,复杂度爆炸($O(2^knklog$ $n)$) 考虑优化,不妨先预处理一下$goal[i] ...
- [USACO13NOV]没有找零No Change [TPLY]
[USACO13NOV]没有找零No Change 题目链接 https://www.luogu.org/problemnew/show/3092 做题背景 FJ不是一个合格的消费者,不知法懂法用法, ...
- 洛谷P3092 [USACO13NOV]没有找零No Change
P3092 [USACO13NOV]没有找零No Change 题目描述 Farmer John is at the market to purchase supplies for his farm. ...
- P3092 [USACO13NOV]没有找零No Change
题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K coins (1 ...
- 洛谷 P3092 [USACO13NOV]没有找零No Change
题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K coins (1 ...
- luogu P3092 [USACO13NOV]没有找零No Change
题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K coins (1 ...
- P3092 [USACO13NOV]没有找零No Change 状压dp
这个题有点意思,其实不是特别难,但是不太好想...中间用二分找最大的可买长度就行了. 题干: 题目描述 Farmer John <= K <= ), each with value .., ...
随机推荐
- this的九种常用场景(转子jb51.net)
[场景1]全局环境中的this指向全局对象 ; alert(a); b = ; alert( ; [场景2]对象内部函数的this指向调用函数的当前对象 ; var bar = { a: , test ...
- selenium 点击浏览器按钮
利用以下的方法,selenium 也可以模拟点击各种浏览器按钮:browser.back()点击“返回”按钮.browser.forward()点击“前进”按钮.browser.refresh()点击 ...
- webapi-2 接口参数
1. 实例 using System; using System.Collections.Generic; using System.Linq; using System.Net; using Sys ...
- ServerSocket和Socket通信
服务器端: 1.服务器端建立通信ServerSocket对象,并设置端口号 2.服务器建立Socket接收客户端连接 3.建立IO输入流读取客户端发送的数据 4.建立IO输出流向客户端输出数据 客户端 ...
- Jquery屏蔽浏览器的F1-F12快捷键,在IE,GOOGLE下测试均无问题
在网上找了找,很多都是js实现的,东找西找,再加上自己的想法也勉强的完成了,直接看代码 <script type="text/javascript" src="Sc ...
- 怎么删除Windows服务
1,首先找到服务名字. 2,在cmd中进到c:下面 3,sc delete 名字. 删除成功
- 21:序列化django对象
django的序列化框架提供了一个把django对象转换成其他格式的机制,通常这些其他的格式都是基于文本的并且用于通过一个管道发送django对象,但一个序列器是可能处理任何一个格式的(基于文本或者不 ...
- 常见的四种Content-Type类型
application/x-www-form-urlencoded 常见的form提交 multipart/form-data 文件提交 application/json 提交json格式的数据 te ...
- JAVA 语言类的特性(成员、重载、构造方法、静态成员)
一.类的私有成员和公有成员 1.私有成员 修饰符private 如果在类的声明前加上修饰符private,则无法从该类的外部访问到该类的内部成员,而只能被该类自身访问和修改,而不嗯那个被其他类, ...
- AC日记——[POI2014]KUR-Couriers 洛谷 P3567
[POI2014]KUR-Couriers 思路: 卡空间,sb题: 代码: #include <bits/stdc++.h> using namespace std; #define m ...