如果最终需要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相关推荐

  1. [PA2014]Pakowanie

    [PA2014]Pakowanie 题目大意: \(n(n\le24)\)个物品和\(m(m\le100)\)个背包,每个物体有一个体积\(a_i\),每个背包有一个容量\(c_i\).问装完所有物品 ...

  2. 【PA2014】【BZOJ3717】Pakowanie

    Description 你有n个物品和m个包.物品有重量,且不可被分割:包也有各自的容量.要把所有物品装入包中,至少需要几个包? Input 第一行两个整数n,m(1<=n<=24,1&l ...

  3. 省选之前的未完成的计划(截至到省选)

    PLAN OF THE COMING HEOI good problems: -bzoj4823:[Cqoi2017]老C的方块 [*] -bzoj3171:[Tjoi2013]循环格 [*] -bz ...

  4. 一句话题解(20180210~)

    2.9 BZOJ 2006 [NOI2010]超级钢琴.这道题目几天之前就做了.做法是固定右端点,左端点在ST表上走,走法其实就是笛卡尔树的走法.完结撒花! BZOJ 1218 [HNOI2003]激 ...

  5. BZOJ3709: [PA2014]Bohater

    BZOJ3709: [PA2014]Bohater Description 在一款电脑游戏中,你需要打败n只怪物(从1到n编号). 为了打败第i只怪物,你需要消耗d[i]点生命值,但怪物死后会掉落血药 ...

  6. bzoj 3714: [PA2014]Kuglarz

    3714: [PA2014]Kuglarz Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1151  Solved: 611 [Submit][St ...

  7. bzoj 3709: [PA2014]Bohater

    3709: [PA2014]Bohater 链接 http://www.lydsy.com/JudgeOnline/problem.php?id=3709 题面 在一款电脑游戏中,你需要打败n只怪物( ...

  8. [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] ...

  9. bzoj3714【PA2014】Kuglarz

    3714: [PA2014]Kuglarz Time Limit: 20 Sec   Memory Limit: 128 MB Submit: 361   Solved: 219 [ Submit][ ...

  10. bzoj3714:[PA2014]Kuglarz

    Pre 神一样的\(MST\) Solution 考虑计算出(或者直接得出)\(sum[i]\)和\(sum[i-1]\)来得出其情况. 转化为得到每一个前缀和(奇或者偶)的值. 对于一个询问\(i\ ...

最新文章

  1. myeclipse java可视化_使用MyEclipse可视化开发Hibernate实例
  2. ribbon客户端的负载均衡
  3. 阿里京东带头打劫,下一个被干掉的就是你
  4. 丰田汽车受战斗操作模式启发影响推人机合作子驾车
  5. java中必检异常有哪些_Java面试题经典面试题220道(附答案)
  6. mysql数据库序列作用_MySQL 序列使用
  7. java autorun_〔批处理〕右键添加命令,让Autorun.inf见鬼去吧
  8. SpringMvc-HandlerExceptionResolver
  9. Vue+element 解决浏览器自动填充记住的账号密码问题
  10. Excel VBA 宏编程入门
  11. 哪里可以下载免费字体,免费可商用字体解决你的烦恼
  12. python计算器算法_Python数学运算入门把Python当作计算器
  13. ENVI/ArcGIS根据坐标位置提取影像DN值(批量)
  14. 服务器被挖矿木马攻击该怎么处理
  15. CityEngine2016-学习笔记(2)Shape Operations
  16. 那些年啊,那些事——一个程序员的奋斗史 ——69
  17. MATLAB交换图片红绿颜色通道,matlab的颜色映射colormap
  18. APT样本分析 -plugx家族RAT⽊⻢
  19. Java自学教程!docker运行镜像无反应
  20. 指针式仪表自动读数与识别(四):非圆形表盘定位

热门文章

  1. Java基础——类与对象
  2. mac MAMP pro安装和破解
  3. fastJson注解@JSONField指定字段的顺序
  4. python模拟键盘上键和回车_python + selenium 模拟键盘升级版PyUserInput
  5. 成为数据分析师要具备什么能力——招式篇
  6. Windows 更新错误 0x80073712
  7. 数据库——关系数据库规范化习题
  8. 【LeetCode】72. Edit Distance
  9. 苹果bundle id是什么?
  10. TTTTTTTTTTDDDDDDDD原来是这样。。。。。。。。。。的