bzoj3312
K个硬币,要买N个物品。
给定买的顺序,即按顺序必须是一路买过去,当选定买的东西物品序列后,付出钱后,货主是不会找零钱的。现希望买完所需要的东西后,留下的钱越多越好,如果不能完成购买任务,输出-1
$$k \leq 16 N \leq 100000$$
考虑状压dp
$dp[STATE]$表示状态为$STATE$的时候能买的最多的东西
记一下最大值 二分一下
。。
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+;
typedef long long LL;
inline LL read()
{
LL x = ,f = ;
char ch;
for(ch=getchar();!isdigit(ch);ch=getchar())if(ch == '-')f = -f;
for(;isdigit(ch);ch=getchar())x = *x+ch-'';
return x*f;
}
int k,n;
LL dp[maxn],a[maxn],sum[maxn],MAXSTATE,ans;
inline LL find(LL l,LL r,LL x)
{
LL l1=l,ret=,top=sum[x]-sum[x-];
while(l<=r)
{
LL mid=(l+r)/;
if (a[mid]-a[l1-]<=top)ret=mid,l=mid+;
else r=mid-;
}
return ret;
}
int main()
{
scanf("%d%d",&k,&n);
for(int i=;i<=k;i++)sum[i] = sum[i-] + read();
for(int i=;i<=n;i++)a[i]=read()+a[i-];
MAXSTATE=(<<k)-;ans=;
for(int i=;i<=MAXSTATE-;i++)
{
for(int j=;j<=k;j++)
if(!(i&(<<j-)))
{
LL num=find(dp[i]+,n,j);
dp[i|(<<j-)]=max(dp[i|(<<j-)],num);
if(num==n)
{
LL tem=;
for(int l=;l<=k;l++)
if((i|(<<j-))&(<<l-))tem+=sum[l]-sum[l-];
ans=min(ans,tem);
}
}
}
printf(ans == ? "-1" : "%d" , sum[k]-ans);
}
bzoj3312的更多相关文章
- 【BZOJ3312】[Usaco2013 Nov]No Change 状压DP+二分
[BZOJ3312][Usaco2013 Nov]No Change Description Farmer John is at the market to purchase supplies for ...
- BZOJ3312:[USACO]No Change(状压DP)
Description Farmer John is at the market to purchase supplies for his farm. He has in his pocket K c ...
- 【bzoj3312】[Usaco2013 Nov]No Change 状态压缩dp+二分
题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K coins (1 ...
- bzoj3312: [Usaco2013 Nov]No Change
题意: K个硬币,要买N个物品.K<=16,N<=1e5 给定买的顺序,即按顺序必须是一路买过去,当选定买的东西物品序列后,付出钱后,货主是不会找零钱的.现希望买完所需要的东西后,留下的钱 ...
- [BZOJ3312][USACO]不找零(状压DP)
Description 约翰带着 N 头奶牛在超市买东西,现在他们正在排队付钱,排在第 i 个位置的奶牛需要支付 Ci元.今天说好所有东西都是约翰请客的,但直到付账的时候,约翰才意识到自己没带钱,身上 ...
- bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)
听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...
随机推荐
- 四种常见的POST提交数据方式
POST一般用来向服务端提交数据,有四种提交数据的格式,分别是: 1.application/x-www-form-urlencoded 2.application/json 3.multipart/ ...
- Fragment小结
Fragment是Android3.0之后增加的新特性,通常人们叫它碎片.可是,我认为把它理解成一个View模块比較好,尽管它不是继承自View.假设阅读过源代码就知道它是内置View对象从而实现Vi ...
- DataTable去除空行
protected void removeEmpty(DataTable dt) { List<DataRow> removelist = new List<DataRow>( ...
- java 匿名类和匿名方法
package com.test; interface product{ int getPrice(); } public class News { /** * @param args */ publ ...
- 串口设置-stty--设置终端线
stty - chang and print terminal line settings SYNOPSIS stty [-F DEVICE | --file=DEVICE] [SETTING]... ...
- Android中List循环遍历性能对照
在android开发中仅仅要是列表式风格界面我们差点儿都须要用到List来存放数据,在数量非常少的List的话差点儿不论什么一种循环遍历方式总体性能都无区别.可是当我们遇到数据量稍大的时候有必要考虑用 ...
- FPGA学习记录 - Quartus II 未使用管脚设置为三态输入
未使用管脚设置为三态输入 Assignments -> Device 或双击器件
- 五个知识体系之-SQL学习-第四天
5. MySQL常用函数 5.1字符串函数 concat(s1,s2....,s3)合并字符串,如果参数有null,则返回null: CONCAT_WS(SEP,s1,s2…,sn) 合并字符串,并且 ...
- Cocos2d-js官方完整项目教程翻译:六、添加Chipmunk物理引擎在我们的游戏世界里
添加Chipmunk物理引擎在我们的游戏世界里 一.简介 cocos2d JS能给我们力量来创造令人印象深刻的游戏世界.但缺乏某种现实. ...
- mysql系列之1.mysql基础
非关系型(NOSQL)数据库 键值存储数据库: memcached / redis / memcachedb / Berkeley db 列存储数据库: Cassandra / Hba ...