AcWing P165 小猫爬山 题解
Analysis
这道题是搜索,类似于小木棍,加一些剪枝。
第一个剪枝是如果当前的答案已经大于了我们已知的最小答案,不用说直接return返回即可。
第二个剪枝是我们可以将小猫的体重从大到小排序,这样我们的搜索树就会缩短许多。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 18+10
using namespace std;
typedef long long ll;
inline int read()
{
int x=;
bool f=;
char c=getchar();
for(; !isdigit(c); c=getchar()) if(c=='-') f=;
for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
if(f) return x;
return -x;
}
inline void write(int x)
{
if(x<){putchar('-');x=-x;}
if(x>)write(x/);
putchar(x%+'');
}
int n,w,ans=,l;
int c[maxn],e[maxn];
bool book[maxn];
inline bool cmp(int a,int b){return a>b;}
inline void dfs(int af,int la,int step,int cnt)
{
bool flag=;
int i;
if(step>=ans)return;
if(cnt==n+)
{
ans=step;
return;
}
for(i=n;i>=af;i--)
if(book[i]==&&c[i]<=la)
{
flag=;
break;
}
if(flag==)
{
for(i=;i<=n;i++)
if(book[i]==)
break;
book[i]=;
dfs(i,w-c[i],step+,cnt+);
book[i]=;
return;
}
for(i=af;i<=n;i++)
{
if(book[i]==&&c[i]<=la)
{
book[i]=;
dfs(i,la-c[i],step,cnt+);
book[i]=;
if(c[i]==la||la==w)return;
i=e[i];
}
} }
int main()
{
n=read();w=read();
for(int i=;i<=n;i++)c[i]=read();
sort(c+,c+n+,cmp);
e[n]=n;
for(int i=n-;i>;i--)
{
if(c[i+]==c[i])e[i]=e[i+];
else e[i]=i;
}
dfs(,w,,);
write(ans+);
return ;
}
请各位大佬斧正(反正我不认识斧正是什么意思)
AcWing P165 小猫爬山 题解的更多相关文章
- AcWing 165. 小猫爬山 DFS
165. 小猫爬山 https://www.acwing.com/problem/content/description/167/ 题目 思路 dfs每一个小猫,对于要不要开新车的状态再进行dfs(注 ...
- TyvjP2018 「Nescafé26」小猫爬山
P2018 「Nescafé26」小猫爬山 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经 ...
- tyvj P2018 「Nescafé26」小猫爬山 解题报告
P2018 「Nescafé26」小猫爬山 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经 ...
- 「CH2201」小猫爬山 解题报告
CH2201 小猫爬山 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 描述 ...
- AcWing:165. 小猫爬山(dfs + 剪枝)
翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰和达达只好花钱让它们坐索道下山. 索道上的缆 ...
- luogu P1361 小猫爬山 [iddfs]
题目描述 WD和LHX饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了. WD和LHX只好花钱让它们坐索道下山.索道上的缆车最大承重量为W ...
- 小猫爬山:dfs
题目描述: 翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰和达达只好花钱让它们坐索道下山. ...
- 2018.11.5 Nescafe26 T1 小猫爬山
题目 题目描述 Freda 和 rainbow 饲养了 N 只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们 终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). Fre ...
- 洛谷 P1361 小猫爬山
题目描述 WD和LHX饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了. WD和LHX只好花钱让它们坐索道下山.索道上的缆车最大承重量为W ...
随机推荐
- Python入门学习——PyQt5程序基本结构
在学习python GUI部分时,一开始看书有点懵,看不懂框架,以下是个人学习所得(参考了别人的视频讲解),错误之处,望大家指教 #0.导入需要的包和模块from PyQt5.Qt import * ...
- wx存储数据到本地及本地获取
官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.setStorageSync.html 存到本地就是存到手机的 ...
- K number(思维和后缀以及3的特性)(2019牛客暑期多校训练营(第四场))
示例1: 输入:600 输出:4 说明:'600', '0', '0', '00' are multiples of 300. (Note that '0' are counted twice bec ...
- Scala 算法案例
移除第一个负数之后的所有负数 // 构建数组 val a = ArrayBuffer[Int]() a += (1, 2, 3, 4, 5, -1, -3, -5, -9) // 每发现一个第一个负数 ...
- Smart3D飞控&地方坐标系
资源 ContextCapture(原Smart3D)教程 | Wish3D 航测数据处理答疑55问!涉及CC.Pix4D.Photoscan.EPS等常见软件问题_云进行 飞控软件 Smart3D常 ...
- 【统计与建模】R语言基本操作
# vec <- rep( seq(1,5,by=0.5),3) # vec <- seq( 1 , 10 , by = 1 ) # min(vec) #最小值 # max(vec) #最 ...
- 玩转【Mock.js】,前端也能跑的很溜
现在开发已经是前后端分离了,前端和后端可以同时进行开发,互不影响,但是有些时候后端开发的接口慢于前端,导致前端需要等待后端的接口完成才能完成前后端对接,为了解决这个痛点,出现了模拟接口数据的方案,目前 ...
- sublime text3 关闭更新提醒
Preferences->settings 在Preferences.sublime-setting --User中 增加: "update_check":false,
- 读取经纬度坐标并存储为字典格式,即key为ID,value为轨迹点
示例数据: #格式为txt文本 ID,L,B 001,116.5154,45.1154 001,116.5160,45.1153 ... 002,xxx,xxx ... 目标:建立轨迹数据结构,即di ...
- 你听过稀疏数组(sparseArray)吗?
稀疏数组(sparseArray) 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: 1.记录数组一共有几行几列,有多少个不同的值 ...