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

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

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

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

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

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

输入格式

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

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

输出格式

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

数据范围

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

输入样例:

5 1996
1
2
1994
12
29

输出样例:

2
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<vector>
#include<cmath>
const int maxn=1e5+5;
typedef long long ll;
using namespace std;
int a[20],car[20],ans;
int n,w;
bool cmp(int x,int y){//搜索顺序优化 return x>y;
}
void dfs(int now,int count){if(count>=ans)//剪枝 return ;//已经没有必要了 if(now>=n+1){ans=min(count,ans);return ;}//满足条件,更新 for(int i=1;i<=count;i++){if(car[i]+a[now]<=w){//能装下 car[i]+=a[now];dfs(now+1,count);car[i]-=a[now];           }            }car[count+1]=a[now];//装不下了,再要一辆车 dfs(now+1,count+1);car[count+1]=0;
}
int main(){scanf("%d%d",&n,&w);for(int i=1;i<=n;i++)scanf("%d",&a[i]);sort(a+1,a+n+1,cmp);//预先排一下序 ans=n;//最多的可能就是一个猫一个车 dfs(1,0);//入口 printf("%d\n",ans);return 0;
}

小猫爬山 (深搜+搜索顺序优化)相关推荐

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

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

  2. 搜索 —— 深搜的剪枝技巧

    [概述] 搜索算法的时间复杂度大多是指数级的,难以满足对程序运行时间的限制要求,为使降低时间复杂度,对深度优先搜索可以进行一种优化的基本方法--剪枝. 搜索的进程可以看做是从树根出发,遍历一颗倒置树( ...

  3. 小猫爬山(dfs剪枝)

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

  4. 【POJ2676】Sudoku(优化搜索顺序)

    problem 补全9*9的数独 满足每行,每列,每个3*3方格内1~9均只出现一次 solution 1.答案 状态:我们关心数独每个位置填了什么数.我们需要在每个状态中找出没有填的位置,检查有哪些 ...

  5. 搜索与图论1—深搜、宽搜、拓扑排序

    本人的LeetCode账号:魔术师的徒弟,欢迎关注获取每日一题题解,快来一起刷题呀~ 本人Gitee账号:路由器,欢迎关注获取博客内容源码. 文章目录 一.深度优先搜索 1 排列数字 2 N皇后 二. ...

  6. 深搜、广搜、搜索剪枝

    搜索与回溯讲解 文章目录 深搜 方向向量: DFS代码: 题目讲解: 八皇后问题 字符序列 自然数的拆分 广搜 BFS代码: 题目讲解: 瓷砖 关系网络 bfs与dfs的用途与区别 搜索剪枝 可行性剪 ...

  7. DFS-深度优先搜索(深搜)

    深度优先搜索(Depth First Search)是搜索的手段之一.它是从某个状态开始,不断的转移状态直到无法转移,然后退回到前一步的状态,继续转移到其他的状态,如此不断的重复,直至找到最终的解. ...

  8. 算法之路——深搜、广搜(简单搜索)

    搜索 通过一定的顺序,枚举每一个数据(经常会通过一些判断条件去掉无意义的数据,即剪枝),找到想要的数据的过程. 深度优先搜索(dfs) 深度优先搜索属于图算法的一种,是一个针对图和树的算法,应为缩写为 ...

  9. 总是搜不到想要的内容?Elasticsearch搜索排名优化了解一下

    导语 | Elasticsearch(下文简称ES) 是当前热门的开源全文搜索引擎,利用它我们可以方便快捷搭建出搜索平台,但通用的配置还需要根据平台内容的具体情况做进一步优化,才能产生令用户满意的搜索 ...

最新文章

  1. jQuery事件绑定on()、bind()与delegate() 方法详解
  2. 操作系统的初始化流程简图
  3. 这是不是帮女朋友拍照时的你?哈哈哈哈
  4. SaltStack WEB UI Halite初体验
  5. C#设计模式之4-原型模式
  6. python发送文件_python:socket传输大文件
  7. 上海新中考体育考试方案公布:总分30分不变
  8. [Java] 蓝桥杯 BEGIN-2 入门训练 序列求和
  9. 【BZOJ】3495: PA2010 Riddle 2-SAT算法
  10. GraphQL | 一种配得上凡尔赛的API框架
  11. 软件开发之韵:和谐敏捷
  12. IDEA查看或修改JDK版本
  13. 思科模拟器(SDN控制器使用教程一)
  14. 关于PC下安装MAC苹果系统!
  15. Java 按照拼音首字母排序
  16. 2023springboot计算机毕业设计选题推荐、springboot计算机毕业设计题目大全
  17. Unity Mesh(五) Mesh 立方体Cube贴图以及六个面分别贴不同的图片
  18. mysql 重装_重装系统后,mysql应该怎么恢復过去
  19. Python | 微信自动回复祝福语
  20. 蓝桥杯真题 ——单词分析(python3)

热门文章

  1. 【Matlab】强化Q学习算法求解迷宫问题
  2. STL-老子的全排列呢
  3. Ubuntu 22.04 LTS 中文桌面/服务器正式版发布 (内含 ISO 镜像下载)
  4. Scratch编自创5五4将棋(1)5五4将棋规则
  5. (Html)实现一个账号密码登录的弹窗界面(代码)
  6. ges resource dynamic 和 ges enqueues较高导致数据库宕机
  7. 如何查询专利费减备案
  8. 无穷小的比较(无穷小的替换常用公式)
  9. echarts 横纵坐标设置
  10. 【Python Matplotlib】设置横纵单位长度相同