题意

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

Input

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

思路:

首先我们可以贪心地选取前几大的包,(由于物品数<=24,其实只用考虑前24个包即可)

考虑到24的数据 状压显得理所当然。

这题需要维护两个东西,

一个是zhi[s]表示装状态为s的物品需要的最小的包数, 
但是这样没法转移,于是还要维护,  h[s]表示对应zhi[s],最后一个包剩下的空间。

zhi[s]从zhi[t]而来(t为s任意去掉一个1),若zhi[t]+1值更小,更新,或者zhi[t]+1==zhi[s]值相同,h[t]更大,更新

可是为什么这样就可以了

考虑一个状态,其实在转移过程中,你考虑了这个状态的每一种放物品顺序

比如取物品2.4 在状态转移zhi[10]  时 肯定是从 zhi[2] 和zhi[8] 分别转移过来的

这就是和贪心的区别(感觉这就是状压的妙处)

#include<bits/stdc++.h>
using namespace std;
int   n,m,h,h1,f,i1,i2,zhi[20000000],ret[20000000],w[20000000],sum[1000],a[100];
bool  cmp(int a1,int b1)
{ return a1>b1;}
int main()
{cin>>n>>m;for (int i=1;i<=n;i++)  cin>>a[i];for (int i=1;i<=m;i++)  cin>>sum[i];sort(sum+1,sum+1+m,cmp);for (int i=1;i<1<<n;i++) w[i]=w[i>>1]+1;memset(zhi,0x3f,sizeof(zhi));zhi[0]=0;for (int i=1;i<1<<n;i++){  i2=i;for (int j=w[i];j;j=w[i2]){  f=0;i2=i2-(1<<(j-1));i1=i-(1<<(j-1));//cout<<i<<' '<<i1<<' '<<i2<<endl;if (a[j]<=ret[i1])  {h=zhi[i1]; h1=ret[i1]-a[j];}else {h=zhi[i1]+1;if (sum[h]<a[j] || h>m)  f=1; h1=sum[h]-a[j];}if(!f)   {if (h<zhi[i]) {  zhi[i]=h; ret[i]=h1;}else {  if (zhi[i]==h)  ret[i]=max(ret[i],h1);}}       }}if (zhi[(1<<n)-1]<=m) cout<<zhi[(1<<n)-1]<<endl;  else cout<<"NIE"<<endl;}

小拓展以示区别  背包问题

放一个我觉得有代表意义的

多重背包问题:

多重背包问题描述:有编号分别为a,b,c的三件物品,它们的重量分别是1,2,2,它们的价值分别是6,10,20,他们的数目分别是10,5,2,现在给你个承重为 8 的背包,如何让背包里装入的物品具有最大的价值总和?

多重背包和01背包、完全背包的区别:多重背包中每个物品的个数都是给定的,可能不是一个,绝对不是无限个。

有两种解法,解题思路:

  1. 作为一个新问题考虑,由于每个物品多了数目限制,因此初始化和递推公式都需要更改一下。初始化时,只考虑一件物品a时,f[1][j] = min{num[1], j/weight[1]}。 计算考虑i件物品承重限制为y时最大价值f[i][y]时,递推公式考虑两种情况,要么第 i 件物品一件也不放,就是f[i-1][y], 要么第 i 件物品放 k 件,其中 1 <= k <= (y/weight[i]),考虑这一共 k+1 种情况取其中的最大价值即为f[i][y]的值,即f[i][y] = max{f[i-1][y], (f[i-1][y-k*weight[i]]+k*value[i])}。 这里为什么不能像完全背包一样直接考虑f[i][y-weight[i]]+value[i]呢?因为这样不容易判断第 i 件物品的个数是否超过限制数量 num[i]

其实就是普通dp,前不久了解到它是NPC问题,而之所以我们能o(n*m)解决,是因为限制了背包容量大小。

[状压dp][BZOJ3717][PA2014]Pakowanie相关推荐

  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. java 2分钟_java – 为什么我的应用程序启动时间超过2分钟?
  2. hadoop install start-dfs.sh 失败
  3. linux下如何查看系统和内核版本
  4. C# ListT泛型用法
  5. C语言日志级别和作用,自己写的C语言通用日志框架,可以控制日志输出等级
  6. 重置SVN用户名与密码,修改SVN的IP地址
  7. 疲软惠普转型痛,逆增联想心头乐
  8. mysql 分区索引失效_分区表的本地索引竟然失效了——ORA-01502
  9. 如何解决aText for mac不响应的教程
  10. Rabbitmq消息可靠投递和重复消费等问题解决方案
  11. 《Reids 设计与实现》第十章 客户端
  12. 设计psd分层素材模板|家居海报设计思路!
  13. Map的传统输出和使用增强for循环的输出
  14. 清华霸榜,长沙理工异军突起!第三届 CCF CCSP落下帷幕
  15. wordpress rest api 漏洞又来了CVE-2017-5487 上次是修改文章内容这次可是泄露用户数据...
  16. 根据用户输入的参数的个数来计算长方形或正方形的面积_小面积(2-4.5㎡)卫生间,怎么做干湿分离?(附:方案+参数+案例)...
  17. TOGAF 知识点整理
  18. 美国软件是如何最终装备在中国攻击直升机上的(二)
  19. Error obtaining UI hierarchy Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncExc
  20. 一大波无门槛优惠券来袭(仅限300张)

热门文章

  1. PAT 1013 数素数
  2. Modbus协议简单总结
  3. ARM.CMSIS.3.20.4.pack和Keil.STM32F1xx_DFP.1.0.5.pack这两个文件的意义
  4. 高中英语语法(001)-虚拟语气
  5. 【存储专题】西瓜哥带您学习高端存储
  6. Golang AES加密解密
  7. 矢量绘图界的性价比之王-Affinity Designer
  8. asp excel导入mysql_asp excel导入数据库
  9. 【统计学】三大相关系数之肯德尔相关系数(kendall correlation coefficient)
  10. HDU 6184 Counting Stars 经典三元环计数