翰翰和达达饲养了N只小猫,这天,小猫们要去爬山。

经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。

翰翰和达达只好花钱让它们坐索道下山。

索道上的缆车最大承重量为W,而N只小猫的重量分别是C1、C2……CN

当然,每辆缆车上的小猫的重量之和不能超过W。

每租用一辆缆车,翰翰和达达就要付1美元,所以他们想知道,最少需要付多少美元才能把这N只小猫都运送下山?
输入格式

第1行:包含两个用空格隔开的整数,N和W。

第2…N+1行:每行一个整数,其中第i+1行的整数表示第i只小猫的重量Ci


输出格式

输出一个整数,表示最少需要多少美元,也就是最少需要多少辆缆车。
数据范围

1≤N≤18
,
1≤Ci≤W≤108

输入样例:

5 1996
1
2
1994
12
29

输出样例:

2

分析:
这个题可以用dfs+ 剪枝可以过。
还可以用状压dp。
dp[i][j] 表示第i辆车 在j这个形式下所放的体积大小。
j这个形式并不是指第i辆车的形式,而是指前i辆车的形式。
注意二进制&运算的优先级。

#include"stdio.h"
#include"string.h"
#include"algorithm"
using namespace std;
#define INF 1001000010int n,W;
int c[20];
int dp[20][1 << 19];int main()
{scanf("%d%d",&n,&W);for(int i = 0; i < 20; i ++)for(int j = 0; j < (1 << 19); j ++)dp[i][j] = INF;for(int i = 1; i <= n; i ++){scanf("%d",&c[i]);dp[i][1 << (i - 1)] = c[i];}dp[1][0] = 0;for(int i = 1; i <= n; i ++){for(int j = 0; j < (1 << (n)); j ++){if(dp[i][j] == INF)continue;for(int k = 1; k <= n; k ++)if(((j&(1<<(k - 1)))== 0) && dp[i][j] + c[k] <= W)dp[i][j|(1<<(k-1))] = min(dp[i][j|(1<<(k-1))],dp[i][j] + c[k]);elsedp[i + 1][j|(1<<(k-1))] = min( dp[i + 1][j|(1<<(k-1))],c[k]);}if(dp[i][(1 << (n)) - 1] != INF){printf("%d\n",i);return 0;}}
}

165. 小猫爬山(状压dp)相关推荐

  1. BZOJ 2073: [POI2004]PRZ( 状压dp )

    早上这道题没调完就去玩NOI网络同步赛了.... 状压dp , dp( s ) 表示 s 状态下所用的最短时间 , 转移就直接暴力枚举子集 . 可以先预处理出每个状态下的重量和时间的信息 . 复杂度是 ...

  2. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

  3. 【BZOJ2073】【POI2004】PRZ(状压dp)

    Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍 ...

  4. bzoj 2073:[POI2004]PRZ 状压DP

    Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍 ...

  5. BZOJ2073 PRZ(状压dp)

    ** BZOJ2073 PRZ(状压dp) ** Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候 ...

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

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

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

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

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

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

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

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

  10. 【每日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 ...

最新文章

  1. 是时候了解一下Serverless了
  2. NGUI 3.5教程(六)Font字体
  3. 生产环境碰到系统CPU飙高和频繁GC,你要怎么排查?
  4. 【JavaSE02】Java基本语法-概念
  5. 资源 | 想进行数据科学项目却没有数据集?26个数据集网站汇总
  6. Java编写编译native方法
  7. 怎样把任意exe程序注册成windows系统服务(手动注册服务)
  8. SQL SERver2005中row_number() 的用法
  9. 【人脸识别】基于matlab PCA+LDA人脸识别【含Matlab源码 680期】
  10. 安卓音量设置流程之MasterVolume
  11. CISP 考试教材《第 6 章 知识域:信息安全评估》知识整理
  12. 微型计算机中的西文字符编码,在微型计算机中,应用最普遍的西文字符编码是什...
  13. OP-TEE内核学习笔记(一)(安全存储)—— 安全文件基础操作(创建、读、写)
  14. 武汉科技大学计算机专业怎样,武汉科技大学计算机专业就业情况如何
  15. python tensorflow学习笔记(五)矩阵乘法运算
  16. 【控制】自适应控制基本概念
  17. 漫谈斐波那契数列与黄金分割比
  18. 干掉Facebook,干掉扎克伯格!
  19. 前端匹配服务器地址修改文件,修改服务器的监听地址
  20. aomei backupper 6(电脑备份工具) v6.0

热门文章

  1. java jsp试卷_JSP试题-带答案
  2. 自定义Popwindow
  3. C++ 版本 30:字符环
  4. 关于openstack,cloudstack,Eucalyptus对比分析
  5. GD32F303调试小记(零)之工程创建与编译
  6. 太厉害了!推荐几款 Redis 可视化工具
  7. Sigmoid函数总结
  8. sift算法搭建(上半部,五,求二阶三阶黑塞矩阵的逆程序对比,c#实现)
  9. python播放音乐同步歌词_使用python播放音乐并制作LRC歌词文件
  10. ncbi下载数据sra和转换fastq流程