【BZOJ3717】[PA2014]Pakowanie

Description

你有n个物品和m个包。物品有重量,且不可被分割;包也有各自的容量。要把所有物品装入包中,至少需要几个包?

Input

第一行两个整数n,m(1<=n<=24,1<=m<=100),表示物品和包的数量。
第二行有n个整数a[1],a[2],…,a[n](1<=a[i]<=10^8),分别表示物品的重量。
第三行有m个整数c[1],c[2],…,c[m](1<=c[i]<=10^8),分别表示包的容量。

Output

如果能够装下,输出一个整数表示最少使用包的数目。若不能全部装下,则输出NIE。

Sample Input

4 3
4 2 10 3
11 18 9

Sample Output

2

题解:一开始想到了栅栏那题,以为是爆搜+剪枝,结果狂TLE不止,后来发现是状压。。。

显然我们应该贪心的从容量较大的包开始选,然后用f[S]表示已经用过的物品状态为S时,最少用几个包,g[S]表示在用的包最少的前提下,最后一个包的最大剩余容量。

转移时用到了一些卡常小技巧~

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,N;
int f[1<<24],g[1<<24],w[1<<24],c[110];
int main()
{scanf("%d%d",&n,&m),N=(1<<n)-1;int i,j,k,S;for(i=0;i<n;i++) scanf("%d",&w[i]);for(i=n-1;i>=0;i--)    w[1<<i]=w[i];for(i=1;i<=m;i++)    scanf("%d",&c[i]);sort(c+1,c+m+1);f[0]=m+1,g[0]=0;for(i=1;i<=N;i++){for(j=i;j;j-=k){k=j&-j,S=i^k;if(g[S]>=w[k]&&(f[S]>f[i]||(f[S]==f[i]&&g[S]>g[i]+w[k])))  f[i]=f[S],g[i]=g[S]-w[k];else if(c[f[S]-1]>=w[k]&&(f[S]>f[i]+1||(f[S]==f[i]+1&&c[f[i]]>g[i]+w[k])))    f[i]=f[S]-1,g[i]=c[f[i]]-w[k];}}if(!f[N]) printf("NIE");else    printf("%d",m+1-f[N]);return 0;
}

转载于:https://www.cnblogs.com/CQzhangyu/p/7787818.html

【BZOJ3717】[PA2014]Pakowanie 状压DP相关推荐

  1. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

  2. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  3. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  4. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  5. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

  6. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

  7. 【洛谷 P1896】[SCOI2005]互不侵犯(状压dp)

    题目链接 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 这是道状压\(DP\)好题啊.. ...

  8. P2340 奶牛会展(状压dp)

    P2340 奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览.由 ...

  9. UVa 11825 (状压DP) Hackers' Crackdown

    这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...

  10. bzoj1402 Ticket to Ride 斯坦纳树 + 状压dp

    给定\(n\)个点,\(m\)条边的带权无向图 选出一些边,使得\(4\)对点之间可达,询问权值最小为多少 \(n \leqslant 30, m \leqslant 1000\) 首先看数据范围,\ ...

最新文章

  1. ThoughtWorks雷达上的新奇变化
  2. jenkins如何在一台机器上开启多个slave
  3. C/C++笔记(04):GB2312字符串和UTF-8之间的转换
  4. HTML5 Canvas、内联 SVG、Canvas vs. SVG
  5. centos安装时卡住不动_转子流量计转子或指针停在某一位置不动的原因及处理方法...
  6. Android studio导入项目提示The same input jar [*.jar] is specified twice
  7. oracle数据库实例,数据库的理解
  8. python内置类属性_python常用内建属性大全
  9. readonly和disabled的区别
  10. 【Python】AxisError: axis 0 is out of bounds for array of dimension 0
  11. 03. 绝对不要以多态(polymorphically)方式处理数组
  12. 编译OpenJDK12:Could not find any dlls in /cygdrive/c/progra~2/wi3cf2~1/10/Redist/ucrt/DLLs/x64
  13. C语言if语句实现成绩划分
  14. 关于移植人脸识别功能到linux开发板
  15. undefined reference to `__stack_chk_guard‘ .. undefined reference to `__stack_chk_fail‘
  16. 高中数学必修一,集合知识概念运算归纳总结
  17. Android程序员二本出身、逆袭网易、一路孤独,flutter插件引用第三方库
  18. linux mysql常用基本操作,Linux下MySQL数据库常用基本操作 一
  19. web前端常用网站收藏
  20. 浅谈人工智能:现状、任务、构架与统一

热门文章

  1. 求当前时间的三种方法(Java)
  2. GnomeSort 又是一个O(n2),不过,只用一次循环……
  3. 微信小程序获取验证码
  4. php怎么获取图片信息,PHP 获取图片信息exif
  5. 【软著】自己申请软件著作权流程
  6. gpu cpu交互_CPU和GPU如何交互以渲染计算机图形?
  7. 小程序如何复用公众号资质快速认证
  8. python数据表盘_构建一个简单地分析表盘
  9. Pillow 库简介
  10. PicGo简介及其下载 安装 配置 使用 卸载