[PA2014]Pakowanie

题目大意:

\(n(n\le24)\)个物品和\(m(m\le100)\)个背包,每个物体有一个体积\(a_i\),每个背包有一个容量\(c_i\)。问装完所有物品至少需要几个包?

思路:

一个贪心的策略是优先装大的包,显然这样可以最少化所用背包的数量。

将所有的背包按照容量从大到小排序,\(f[s]\)表示装了物品的状态为\(s\),用了前\(f[s]\)大的背包。\(g[s]\)表示装了物品的状态为\(s\),最后那个背包用了\(g[s]\)的容量。

随便转移就好了。

时间复杂度\(\mathcal O(2^nn)\)。

源代码:

#include<cstdio>
#include<cctype>
#include<climits>
#include<algorithm>
#include<functional>
inline int getint() {register char ch;while(!isdigit(ch=getchar()));register int x=ch^'0';while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');return x;
}
const int N=24,M=101;
int a[N],c[M],f[1<<N],g[1<<N];
int main() {const int n=getint(),m=getint();for(register int i=0;i<n;i++) a[i]=getint();for(register int i=1;i<=m;i++) c[i]=getint();std::sort(&c[1],&c[m]+1,std::greater<int>());std::fill(&f[1],&f[1<<n],INT_MAX);for(register int i=1;i<1<<n;i++) {for(register int j=0;j<n;j++) {if(!((i>>j)&1)) continue;const int k=i^(1<<j);const int tmp1=g[k]+a[j]<=c[f[k]]?f[k]:f[k]+1;const int tmp2=tmp1==f[k]?g[k]+a[j]:a[j];if(tmp2>c[tmp1]) continue;if(tmp1<f[i]) {f[i]=tmp1;g[i]=INT_MAX;}if(tmp1==f[i]) g[i]=std::min(g[i],tmp2);}}if(f[(1<<n)-1]==INT_MAX) {puts("NIE");return 0;}printf("%d\n",f[(1<<n)-1]);return 0;
}

转载于:https://www.cnblogs.com/skylee03/p/9470680.html

[PA2014]Pakowanie相关推荐

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

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

  2. 一句话题解(20180210~)

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

  3. 【PA2014】【BZOJ3717】Pakowanie

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

  4. BZOJ3709: [PA2014]Bohater

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

  5. bzoj 3714: [PA2014]Kuglarz

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

  6. bzoj 3709: [PA2014]Bohater

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

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

  8. bzoj3714【PA2014】Kuglarz

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

  9. bzoj3714:[PA2014]Kuglarz

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

最新文章

  1. fpga数据位宽截取_FPGA信号截位策略研究
  2. 一个狠招|如何高效学习3D视觉
  3. Socket粘包问题
  4. 图的基本算法实现(邻接矩阵与邻接表两种方法)
  5. 基本概念/MM相关概念
  6. 模型 标签数据 神经网络_大型神经网络和小数据的模型选择
  7. 最后一条记录_幸好朋友圈没有访客记录。
  8. html项目_Python Selenium项目实战之添加发送HTML测试报告邮件!
  9. 记一次mysql故障恢复
  10. java web登录代码_Java Web 登录页面的实现代码实例
  11. iphone手机投影到电脑屏幕上
  12. 计算机arp 各命令,ARP命令参数详解
  13. metasploit的SET的Credential Harvester Attack Method
  14. 在微信小游戏中使用tensorflow的face-landmarks-detection
  15. java绘制聊天气泡代码_封装一个canvas画对话气泡的函数
  16. 中国LED植物照明行业盈利能力与进出口前景预测报告2021-2026年
  17. 石头扫地机器人遇见地毯_当戴森V8遇上石头扫地机器人,彻底拯救懒癌患者
  18. 第五章 Java字符串总结
  19. 计算机应用小数的转换,电脑计算器进位制换算怎么不能输入小数
  20. 【转】关于第三方支付,看这篇文章就够了!

热门文章

  1. template might not exist or might not be accessible by any of the configured Template Resolvers
  2. 合成(composite)模式
  3. C# 5.0中引入了async 和 await
  4. MVC3 基本业务开发框架(强转)
  5. 十年技术,不要再迷茫
  6. 第1章 信息检索基础
  7. 标准爬虫初探,来自Python之父的大餐!
  8. 神奇的requestAnimationFrame
  9. weblogic 12c 一键静默建域、集群、受管,计算机以及添加受管到集群
  10. LTE基带芯片出货量首次超过50%