小猫爬山 (深搜+搜索顺序优化)
翰翰和达达饲养了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;
}
小猫爬山 (深搜+搜索顺序优化)相关推荐
- DFS剪枝优化 小猫爬山 数独
DFS剪枝策略总结 优化搜索顺序 优先搜索分支数少(剩余选择少)的情况 排除等效冗余 若对顺序没有要求 可以将排列转化为组合 可行性剪枝 不合法的情况不进行搜索 最优化剪枝 若当前的"消耗& ...
- 搜索 —— 深搜的剪枝技巧
[概述] 搜索算法的时间复杂度大多是指数级的,难以满足对程序运行时间的限制要求,为使降低时间复杂度,对深度优先搜索可以进行一种优化的基本方法--剪枝. 搜索的进程可以看做是从树根出发,遍历一颗倒置树( ...
- 小猫爬山(dfs剪枝)
Description 翰翰和达达饲养了 N 只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了 翰翰和达达只好花钱让它们坐索道下山. 索道上的缆 ...
- 【POJ2676】Sudoku(优化搜索顺序)
problem 补全9*9的数独 满足每行,每列,每个3*3方格内1~9均只出现一次 solution 1.答案 状态:我们关心数独每个位置填了什么数.我们需要在每个状态中找出没有填的位置,检查有哪些 ...
- 搜索与图论1—深搜、宽搜、拓扑排序
本人的LeetCode账号:魔术师的徒弟,欢迎关注获取每日一题题解,快来一起刷题呀~ 本人Gitee账号:路由器,欢迎关注获取博客内容源码. 文章目录 一.深度优先搜索 1 排列数字 2 N皇后 二. ...
- 深搜、广搜、搜索剪枝
搜索与回溯讲解 文章目录 深搜 方向向量: DFS代码: 题目讲解: 八皇后问题 字符序列 自然数的拆分 广搜 BFS代码: 题目讲解: 瓷砖 关系网络 bfs与dfs的用途与区别 搜索剪枝 可行性剪 ...
- DFS-深度优先搜索(深搜)
深度优先搜索(Depth First Search)是搜索的手段之一.它是从某个状态开始,不断的转移状态直到无法转移,然后退回到前一步的状态,继续转移到其他的状态,如此不断的重复,直至找到最终的解. ...
- 算法之路——深搜、广搜(简单搜索)
搜索 通过一定的顺序,枚举每一个数据(经常会通过一些判断条件去掉无意义的数据,即剪枝),找到想要的数据的过程. 深度优先搜索(dfs) 深度优先搜索属于图算法的一种,是一个针对图和树的算法,应为缩写为 ...
- 总是搜不到想要的内容?Elasticsearch搜索排名优化了解一下
导语 | Elasticsearch(下文简称ES) 是当前热门的开源全文搜索引擎,利用它我们可以方便快捷搭建出搜索平台,但通用的配置还需要根据平台内容的具体情况做进一步优化,才能产生令用户满意的搜索 ...
最新文章
- jQuery事件绑定on()、bind()与delegate() 方法详解
- 操作系统的初始化流程简图
- 这是不是帮女朋友拍照时的你?哈哈哈哈
- SaltStack WEB UI Halite初体验
- C#设计模式之4-原型模式
- python发送文件_python:socket传输大文件
- 上海新中考体育考试方案公布:总分30分不变
- [Java] 蓝桥杯 BEGIN-2 入门训练 序列求和
- 【BZOJ】3495: PA2010 Riddle 2-SAT算法
- GraphQL | 一种配得上凡尔赛的API框架
- 软件开发之韵:和谐敏捷
- IDEA查看或修改JDK版本
- 思科模拟器(SDN控制器使用教程一)
- 关于PC下安装MAC苹果系统!
- Java 按照拼音首字母排序
- 2023springboot计算机毕业设计选题推荐、springboot计算机毕业设计题目大全
- Unity Mesh(五) Mesh 立方体Cube贴图以及六个面分别贴不同的图片
- mysql 重装_重装系统后,mysql应该怎么恢復过去
- Python | 微信自动回复祝福语
- 蓝桥杯真题 ——单词分析(python3)