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数降序刷 ---------------------------- ...
随机推荐
- Lua学习八----------Lua运算符
© 版权声明:本文为博主原创文章,转载请注明出处 1.Lua运算符: - 算术运算符:+(加法).-(减法).*(乘法)./(除法-取整).%(除法-取余).^(乘幂).-(负号) - 关系运算符:= ...
- Html简单的整页切换
恩,语言组织不是很好,直接上代码吧.... <!DOCTYPE html> <html> <head lang="en"> <meta c ...
- Java提高(二)---- HashTable
阅读博客 java提高篇(二五)—–HashTable 这篇博客由chenssy 发表与2014年4月,基于源码是jdk1.7 ========================== 本文针对jdk1. ...
- 字符数组和strcpy
已知strcpy函数的原型是char *strcpy(char *strDest, const char *strSrc);,其中strDest是目的字符串,strSrc是源字符串. (1)Write ...
- JS基础常识理解
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- EasyNVR RTSP转RTMP-HLS流媒体服务器前端构建之:内部搜索功能的实现
上一篇介绍了处理接口获取的数据,本篇将介绍如何在接收到的数据中搜索出自己符合条件的数据: 为了页面的美观,我们往往会以分页的形式来进行数据的展示.但是,当需要展示出来的数据太多的时候,我们很难迅速的找 ...
- ArcGIS Overview Map(鹰眼/概览图)
一.说明 引用文件那块,可以参考我上一篇博文,arcgis api for javascript离线部署. 这篇博文中,地图占满整个body 二.运行效果 三.HTML代码 <!DOCTYPE ...
- UITableView的headerView和headerInsectionView
UITableView有两个headerView:tableHeaderView.和headerInsectionView(组头视图). 给tableView添加这两个View:tableHead ...
- 用c++后缀自动机实现最大公共字符串算法,并封装成Python库
后缀自动机的C++代码转自https://e-maxx.ru/algo/suffix_automata,其余封装为自写. 在C++文件同级目录建立setup.py文件,代码如下: # !/usr/bi ...
- linux卸载软件
rpm -q -a 查询当前系统安装的所有软件包 rpm -e 软件包名 参数e的作用是使rpm进入卸载模式,对名为某某某的软件报名进行卸载 rpm -e 软件包名 -nodeps 由于系统中各个软件 ...