首页 > 其他分享 >小猫爬山——dfs模板题一道

小猫爬山——dfs模板题一道

时间:2024-08-15 19:52:53浏览次数:15  
标签:小猫 int dfs 空格 num 缆车 模板

最近做搜索里面的题目,发现还是有很多漏洞的

比如下面这道小猫爬山题,还是不会做看的答案...气死我了


小猫爬山

时间限制: 1.000 Sec  内存限制: 128 MB
提交 状态

题目描述

Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山。经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。
Freda和rainbow只好花钱让它们坐索道下山。索道上的缆车最大承重量为W,而N只小猫的重量分别是C1、C2……CN。当然,每辆缆车上的小猫的重量之和不能超过W。每租用一辆缆车,Freda和rainbow就要付1美元,所以他们想知道,最少需要付多少美元才能把这N只小猫都运送下山?

输入

第一行包含两个用空格隔开的整数,N和W。
接下来N行每行一个整数,其中第i+1行的整数表示第i只小猫的重量Ci。

输出

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

样例输入 Copy
5 1996
1
2
1994
12
29
样例输出 Copy
2
提示

对于100%的数据,1<=N<=18,1<=Ci<=W<=10^8。


思路:一开始其实我最先想到的是贪心,但仔细想想证明不出来最优方案。一开始想着用双指针,拿一个大猫,再拿很多小猫和它搭配一起放,但都不对。这时我们注意到,猫的数量很少,换句话就是最多用的缆车就是18个。那我们考虑dfs

可以把缆车考虑成一个个空格,要在空格里面填数字。那就每次循环空格,看哪个空格能填下当前的小猫。

注意这题是要优化的。两个优化:1.当前答案大于之前答案,立即return。2.将小猫排序,先安排大的小猫,这样如果大猫不行就直接跳,省的放了小猫后发现不行还要一步步回去。

代码附上:

#include<iostream>
#include<algorithm>
using namespace std;
int n,w,ans=100;
int c[100],car[100];
bool sorrt(int i,int j){
	return i>j;
}
void dfs(int cat_num,int car_num){
//	cout<<cat_num<<" "<<car_num<<" "<<car[car_num]<<endl;
	if(car_num>ans){
		return ;
	}
	if(cat_num>n){
		ans=car_num;
		return ;
	}
	for(int i=0;i<car_num;i++){
		if(c[cat_num]+car[i]<=w){
			car[i]+=c[cat_num];
			dfs(cat_num+1,car_num);
			car[i]-=c[cat_num];
		}
	}
	car[car_num]=c[cat_num];
	dfs(cat_num+1,car_num+1);
}
int main()
{
	cin>>n>>w;
	for(int i=1;i<=n;i++){
		cin>>c[i];
	}
	sort(c+1,c+n+1,sorrt);
	dfs(1,1);
	cout<<ans;
	return 0;
}

标签:小猫,int,dfs,空格,num,缆车,模板
From: https://blog.csdn.net/2301_81888203/article/details/141230225

相关文章

  • ppt模板网站有哪些?带你挑选各种模板
    #周一综合征还能治好吗#?每周一早上的懊恼、拖延、抗拒……这些负面情绪,都是周日晚上熬夜屯下来的。但是问题的根源不在于周一,而在于我们对工作的态度和方法。很多人都是因为缺乏灵感和时间,而无法制作出高质量的ppt应对开会。其实,用ppt模板功能正是对抗“周一综合征”的秘密......
  • 易优Assign模板文件中定义变量-Eyoucms标签手册
    【基础用法】名称:assign功能:模板文件中定义变量,可在其他标签里使用该变量语法:{eyou:assignname='typeid'value='5'/}文件:无参数:name=''变量名value=''赋给变量名的值底层字段:无【更多示例】-------------------------------示例1------------------------------......
  • 【算法模板】计算几何:旋转卡壳求凸包直径
    旋转卡壳算法是一种几何算法,主要用于在二维平面上求解与凸包相关的最优问题。该算法利用凸包顶点的顺序性和对称性,通过模拟两个卡壳(calipers)沿着凸包边界的旋转来寻找最优解。常见的应用包括计算凸包的直径(即最远点对之间的距离)、最小包围矩形(最小面积矩形),以及最小宽度(宽度......
  • antd模板工程
    pnpmcreatevite@latestmy-project----templatereactcdmy-projectpnpminstall-Dtailwindcsspostcssautoprefixernpxtailwindcssinit-ptailwind.config.js:/**@type{import('tailwindcss').Config}*/exportdefault{corePlugins:{......
  • ABP默认模板修改默认数据库类型并初始化数据库数据
    我这里以SQLite数据库为例,其他数据库类似。1.下载模板https://aspnetboilerplate.com/ 根据自己的需求选择版本和前端框架并填写项目名称,点击“Createmyproject!”即可下载一个ABP标准模板项目。  解压下载好的压缩包,找到目录:aspnet-core,接下来就可以用VS打开.sln......
  • c++常用模板(持续更新中)
    二分手写#include<bits/stdc++.h>usingnamespacestd;intn,m;inta[N];boolf=0;intFIND(intx){ intl=1,r=n; while(l<=r) { intmid=(l+r)/2; if(x==a[mid])returnmid; if(x<a[mid])r=mid-1; if(x>a[mid])l=mid+1; } return-1;......
  • 回溯算法介绍以及模板
    回溯算法的理解:回溯算法可以理解为一颗树形结构,即一颗n叉树,当遍历到叶子节点的时候,我们就到达了递归的终点,此时我们应该往上走。回溯法解决的问题都可以抽象为树形结构,是的,我指的是所有回溯法的问题都可以抽象为树形结构!因为回溯法解决的都是在集合中递归查找子集,集合的大小就......
  • linux内核模块 字符设备驱动模板
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、linux内核模块是什么?二、代码示例总结前言提示:这里可以添加本文要记录的大概内容:内核版本5.10.92linux内核模块字符设备驱动模板cdev注册字符设备,创建一个/dev/下设备节点和/sy......
  • P5431 【模板】模意义下的乘法逆元 2
    看到5e6的数据,500ms的时限,\(O(NlogN)\)快速幂直接跑肯定会T掉,那我们就要考虑优化一下式子。我们令\(s=\prod_{1}^{n}{a[i]}\),那我们给第i个式子通分,就为$\frac{k^i*s/a[i]}{s}$\(s/a[i]\)就相当于$\prod^{i-1}_{1}{a[i]}*\prod_{i+1}^{n}{a[i]}$因此我们只需要预......
  • pbootcms新手必读|安装需知|环境要求|快速部署|获取授权码|模板制作
    环境要求服务器:Linux/Windows/Nginx/Apache/IIS PHP版本:不小于5.4,完美支持php7。推荐PHP5.6和PHP7.3MYSQL版本:5.0以上。推荐使用5.5+快速部署1、将官网下载的压缩包里面所有文件和文件夹上传到你的网站根目录(支持安装在二级目录)2、数据库默认采用的是sqlite,不......