qwq貌似看起来很简单的一个题…

但是貌似复杂度写的有点假。

我们令f[s]f[s]f[s]表示已经装进了集合sss中的物品的最少花费的背包数量,然后g[s]g[s]g[s]则表示最后一个背包最多剩下多少的体积。

qwq但是我们发现,由于我们不能够状压背包,那我们就需要考虑一下该怎么处理背包这个问题。

一个比较显然的想法,我们优先使用体积大的背包。因为我们是状压dp,所以这个顺序是对的,不会出现那种因为放了小的物品而导致大的物品放不进去的情况,总会枚举到正确的情况的。

需要注意的是,物品不能拆分,如果我们对于当前位置,剩下的背包都不能够放进,就直接continuecontinuecontinue

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#define mk make_pair
#define ll long long
using namespace std;
inline int read()
{int x=0,f=1;char ch=getchar();while (!isdigit(ch)) {if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}
const int maxn = 4e7+1e2;
const int maxm = 1e5+1e2;
int f[maxn],g[maxn];
int a[maxm],c[maxm];
int n,m;
bool cmp(int a,int b)
{return a>b;
}
int main()
{n=read(),m=read();for (int i=1;i<=n;i++) a[i]=read();for (int i=1;i<=m;i++) c[i]=read();sort(c+1,c+1+m,cmp);memset(f,127/3,sizeof(f));f[0]=0;g[0]=0;for (register int i=0;i<(1<<n);++i){if (f[i]==f[maxn-3]) continue;for (register int j=1;j<=n;j++){if ((1<<(j-1))^i){int now = a[j];int x = g[i];int y = f[i];if(x>=a[j]){x=x-a[j];}else{y++;while (a[j]>c[y] && y<=m){y++;}if (y==m+1){continue;} x=c[y]-a[j];}int tmp = (i|(1<<(j-1)));if(f[tmp]>y) f[tmp]=y,g[tmp]=x;else if (f[tmp]==y && g[tmp]<x) g[tmp]=x;  }}}if (f[(1<<n)-1]==f[maxn-3]) cout<<"NIE\n";else cout<<f[(1<<n)-1]<<endl; return 0;
}

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. PHP设计模式之组合模式(Composite Pattern)
  2. 用margin还是用padding
  3. hsf 架构_HSF 服务
  4. hibernate QBC检索方式查询
  5. java 假设当前时间_java——推断日期是否在今天之前
  6. 试着用windows live writer来写篇日志
  7. [Golang] struct Tag说明
  8. 全球计算机用户人数,NIC2019年11月:全球IPv6 用户数占比中国居43位
  9. 使用docker运行dotnetcore站点
  10. REST服务和RESTful API是什么
  11. JavaSwing实现简单连连看小游戏
  12. 前馈神经网络初步了解
  13. Jvm面试题总结及答案 300道(2022年最新版 )
  14. Mindjet MindManager 2018 版本下载
  15. AutoCAD Civil 3D中将CASS地形图中地形点转换成CAD点实体
  16. 【C/C++学习笔记】C++11 random 随机数(TR1)
  17. HTML绘制七巧板,如何使用HTML5 CSS3制作简单七巧板
  18. 【讨论】怎么处理工作中的杂事?
  19. Java代码的.equest的空指针异常
  20. 学计算机买笔记本是i5 i7,对我们普通人买电脑来说,i7和i5、i3有多大区别,玩游戏选哪款好?!...

热门文章

  1. GnomeSort 又是一个O(n2),不过,只用一次循环……
  2. php二次开发帝国,【使用说明】帝国cms万能通用api二次开发核心包
  3. 计算机在流体力学中的应用,哈尔滨工业大学-工程流体力学课程
  4. CIO如何计算信息化的投资回报率?
  5. oracle dbf文件是什么,.ora文件、.dbf文件和.dat文件的区别
  6. 谷歌企业文化建设分析
  7. 小龙秋招【面试笔记】正式发布,速来围观!(已有40+同学斩获大厂offer)
  8. 丹佛大学计算机专业,丹佛大学计算机工程专业排名第(2018年USNEWS美国排名)...
  9. 人工智能导论——逻辑推理
  10. 华为天才少年——稚晖君!