题目描述

翰翰和达达饲养了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,加一些剪枝技巧。这道题能学到的地方一个是搜索的思路,一个就是剪枝技巧。搜索思路是一只小猫一只小猫搜索,对于搜索的每只小猫,匹配每一个小车车,如果小车车能放得下这只小猫,就把小猫放进去,继续dfs。最后是重新开辟一个小车车的情况dfs。
对于剪枝技巧,第一个剪枝的地方是如果小车车的数量比最小值还大的话,这个树枝直接砍掉,因为即使你遍历到枝头得到的答案也肯定比最小值大。这个技巧对于所有的求最小值的dfs都可以用,可以省去很大的时间。另外是要把小猫从最大的到最小的排一遍,因为我们要尽量使靠近根节点的树枝分叉小一些,这样搜索的次数会少很多。就是优先考虑决策少的元素。重的猫能放的车会少一些,所以先考虑重的猫。

要勤加思考,原来的英语老师说过,你可以懒一些,但你不能思考上懒。思考上懒才会导致你成绩难以提高。

ac代码

#include<iostream>
#include<algorithm>
using namespace std;int n,w;
int a[20];
int b[20];
int ans;
int minn;bool cmp(int a,int b){return a>b;
}void dfs(int cat,int car) { if(car>minn)    return ;if(cat>=n){if(car<minn)minn=car;return;}    for(int i=0; i<car; i++) {if(b[i]+a[cat]<=w) {b[i]+=a[cat];dfs(cat+1,car);b[i]-=a[cat];}}b[car]+=a[cat];dfs(cat+1,car+1);b[car]-=a[cat];return;
}int main() {cin>>n>>w;minn=n;for(int i=0; i<n; i++) {cin>>a[i];}sort(a,a+n,cmp);dfs(0,0);ans=minn;cout<<ans;return 0;
}

acwing-小猫爬山相关推荐

  1. DFS剪枝优化 小猫爬山 数独

    DFS剪枝策略总结 优化搜索顺序 优先搜索分支数少(剩余选择少)的情况 排除等效冗余 若对顺序没有要求 可以将排列转化为组合 可行性剪枝 不合法的情况不进行搜索 最优化剪枝 若当前的"消耗& ...

  2. DFS(剪枝与优化) - 洛谷 P1361 - 小猫爬山

    DFS(剪枝与优化) - 洛谷 P1361 - 小猫爬山 翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_&l ...

  3. 洛谷 P1361 小猫爬山

    P1361 小猫爬山 题目描述 WD和LHX饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了. WD和LHX只好花钱让它们坐索道下山.索道 ...

  4. tyvj P2018 「Nescafé26」小猫爬山 解题报告

    P2018 「Nescafé26」小猫爬山 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经 ...

  5. acwing165.小猫爬山

    做题心得Acwing165.小猫爬山 题目 翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰 ...

  6. 【AcWing 165】 小猫爬山 简单dfs + 剪枝优化

    翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰和达达只好花钱让它们坐索道下山. 索道上的缆 ...

  7. AcWing 165 小猫爬山

    题目描述: 翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰和达达只好花钱让它们坐索道下山. ...

  8. AcWing - 165 小猫爬山(dfs)

    题目链接:点击查看 题目大意:给出n只小猫坐索道下山,索道上缆车的最大承重为W,而n只小猫的重量分别为C1,C2--Cn,要求每辆缆车上的小猫重量之和不能超过W,问最少需要几个缆车才能将所有的小猫都运 ...

  9. luogu P1361 小猫爬山 [iddfs]

    题目描述 WD和LHX饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了. WD和LHX只好花钱让它们坐索道下山.索道上的缆车最大承重量为W ...

  10. 小猫爬山(DFS+剪枝)

    目录 题目描述 分析 优化1 优化2 Code 题目描述 翰翰和达达饲养了 N N N 只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕& ...

最新文章

  1. 平民架构的春天——UCloud数据方舟实战记
  2. java数组语法_Java 基本语法----数组
  3. opencv中的threshold()函数(二值化)
  4. 深入 理解 Statement 和 PreparedStatement
  5. kettle中使用javascript步骤和fireToDB函数实现自己定义数据库查询
  6. Flex通用克隆(clone)方法
  7. POJ-1789 Truck History 最小生成树
  8. 【物联网】 Yeelink开发平台注册
  9. SAP云平台里给应用创建自定义环境变量
  10. 嵌入式RT3070 AP模式移植
  11. 亲历漏洞研究最让人难受的地方:看到打补丁版本,才知漏洞一直近在眼前(详述)...
  12. 5图片展示_拼多多搜索【智能创意】推广5大功能升级!
  13. SPI通信协议技术说明文档
  14. ksz9031 mmd读取不了_Ambarella 平台KSZ9031网卡直连不识别问题
  15. 解决 java double 减 int 型 产生的精度问题
  16. 微服务分布式构架开发实战PDF,阿里架构师推荐,快快收藏吧
  17. 【企业】乔吉拉德之 250 定律
  18. 数值最优化-KKT条件(一阶必要条件)证明总结
  19. 虚拟机服务器警报设置,设置VMware vCenter警报器获得更好的管理
  20. jq linux下载文件,Linux中的Json格式化神器jq下载与安装

热门文章

  1. Chrome、Edge等浏览器多线程下载功能开启
  2. UI设计教程分享:关于海报的合成过程
  3. 【论文笔记】知识图谱推理PRA——Relational retrieval using a combination of path-constrained random walks
  4. 当新消费撞上颜值经济,国产美瞳成为资本新宠儿
  5. android lcd,国产安卓机:LCD屏幕,正式再见
  6. Python实现常见的排序算法
  7. iPhone Plus手机的分辨率到底是多少,是1080×1920还是1242×2208?
  8. 世界排名第 3 的滴滴裁员,开春求职必知的独角兽排行榜
  9. 程序学3DMax之改变物体的中心轴及物体归置零点
  10. mysql association_MyBatis association的两种形式——MyBatis学习笔记之四