BZOJ3717: [PA2014]Pakowanie
如果最终需要ans个包,一定是最大的ans个
将容量排个序后从大到小状压dp,f[i]表示放了i状态的物品,至少用f[i]个包,当前包还剩g[i]的容量
把i每一位取出来转移一下,可以用lowbit加速
code:
#include<set>
#include<map>
#include<deque>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<complex>
#include<iostream>
#include<algorithm>
#define ll long long
#define inf 1e9
#define lowbit(x) x&(-x)
using namespace std;inline void read(int &x)
{char c; int f=1;while(!((c=getchar())>='0'&&c<='9')) if(c=='-') f=-1;x=c-'0';while((c=getchar())>='0'&&c<='9') (x*=10)+=c-'0';if(f==-1) x=-x;
}
const int maxn = 110;
const int maxv = 1<<24;int n,m;
int a[maxn],b[maxn];
int s[maxv];
int f[maxv],g[maxv];int main()
{read(n); read(m);for(int i=1;i<=n;i++) read(a[i]);for(int i=1;i<=n;i++) s[1<<i-1]=a[i];for(int i=1;i<=m;i++) read(b[i]);sort(b+1,b+m+1);memset(f,-1,sizeof f);f[0]=1,g[0]=b[m]; int al=1<<n;for(int i=1;i<al;i++){int l;for(int j=i;j;j^=l){l=lowbit(j);int x=s[l],ii=i^l;if(f[ii]==-1) continue;if(g[ii]>=x){if(f[i]==-1||f[i]>f[ii]||(f[i]==f[ii]&&g[i]<g[ii]-x))f[i]=f[ii],g[i]=g[ii]-x;}else{int y=b[m-f[ii]];if(y>=x) {if(f[i]==-1||f[i]>f[ii]+1||(f[i]==f[ii]+1&&g[i]<y-x))f[i]=f[ii]+1,g[i]=y-x;}}}}--al;if(f[al]==-1) puts("NIE");else printf("%d\n",f[al]);return 0;
}
BZOJ3717: [PA2014]Pakowanie相关推荐
- [PA2014]Pakowanie
[PA2014]Pakowanie 题目大意: \(n(n\le24)\)个物品和\(m(m\le100)\)个背包,每个物体有一个体积\(a_i\),每个背包有一个容量\(c_i\).问装完所有物品 ...
- 【PA2014】【BZOJ3717】Pakowanie
Description 你有n个物品和m个包.物品有重量,且不可被分割:包也有各自的容量.要把所有物品装入包中,至少需要几个包? Input 第一行两个整数n,m(1<=n<=24,1&l ...
- 省选之前的未完成的计划(截至到省选)
PLAN OF THE COMING HEOI good problems: -bzoj4823:[Cqoi2017]老C的方块 [*] -bzoj3171:[Tjoi2013]循环格 [*] -bz ...
- 一句话题解(20180210~)
2.9 BZOJ 2006 [NOI2010]超级钢琴.这道题目几天之前就做了.做法是固定右端点,左端点在ST表上走,走法其实就是笛卡尔树的走法.完结撒花! BZOJ 1218 [HNOI2003]激 ...
- BZOJ3709: [PA2014]Bohater
BZOJ3709: [PA2014]Bohater Description 在一款电脑游戏中,你需要打败n只怪物(从1到n编号). 为了打败第i只怪物,你需要消耗d[i]点生命值,但怪物死后会掉落血药 ...
- bzoj 3714: [PA2014]Kuglarz
3714: [PA2014]Kuglarz Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1151 Solved: 611 [Submit][St ...
- bzoj 3709: [PA2014]Bohater
3709: [PA2014]Bohater 链接 http://www.lydsy.com/JudgeOnline/problem.php?id=3709 题面 在一款电脑游戏中,你需要打败n只怪物( ...
- [BZOJ]3727: PA2014 Final Zadanie
题解: 我们可以得到 $ b[fa_i]+Sum-2*sz[i]=b[i] $ 然后我们把n-1条边的价值求和起来化简 $ (n-1)*Sum-2*b[1]=\sum_{i=2}^{n}b[i] ...
- bzoj3714【PA2014】Kuglarz
3714: [PA2014]Kuglarz Time Limit: 20 Sec Memory Limit: 128 MB Submit: 361 Solved: 219 [ Submit][ ...
- bzoj3714:[PA2014]Kuglarz
Pre 神一样的\(MST\) Solution 考虑计算出(或者直接得出)\(sum[i]\)和\(sum[i-1]\)来得出其情况. 转化为得到每一个前缀和(奇或者偶)的值. 对于一个询问\(i\ ...
最新文章
- myeclipse java可视化_使用MyEclipse可视化开发Hibernate实例
- ribbon客户端的负载均衡
- 阿里京东带头打劫,下一个被干掉的就是你
- 丰田汽车受战斗操作模式启发影响推人机合作子驾车
- java中必检异常有哪些_Java面试题经典面试题220道(附答案)
- mysql数据库序列作用_MySQL 序列使用
- java autorun_〔批处理〕右键添加命令,让Autorun.inf见鬼去吧
- SpringMvc-HandlerExceptionResolver
- Vue+element 解决浏览器自动填充记住的账号密码问题
- Excel VBA 宏编程入门
- 哪里可以下载免费字体,免费可商用字体解决你的烦恼
- python计算器算法_Python数学运算入门把Python当作计算器
- ENVI/ArcGIS根据坐标位置提取影像DN值(批量)
- 服务器被挖矿木马攻击该怎么处理
- CityEngine2016-学习笔记(2)Shape Operations
- 那些年啊,那些事——一个程序员的奋斗史 ——69
- MATLAB交换图片红绿颜色通道,matlab的颜色映射colormap
- APT样本分析 -plugx家族RAT⽊⻢
- Java自学教程!docker运行镜像无反应
- 指针式仪表自动读数与识别(四):非圆形表盘定位