首页 > 其他分享 ><DFS剪枝>数字王国之军训排队

<DFS剪枝>数字王国之军训排队

时间:2024-03-15 20:58:57浏览次数:15  
标签:剪枝 return int DFS dep 队伍 dfs 军训

其实就是将搜索过程一些不必要的部分直接剔除掉。
剪枝是回溯法的一种重要优化手段,往往需要先写一个暴力搜索,然后找到某些特殊的数学关系,或者逻辑关系,通过它们的约>束让搜索树尽可能浅而小,从而达到降低时间复杂度的目的。

示例:
在这里插入图片描述
分析:
n->[1,10],数据范围并不是很大,我们可以考虑枚举所有答案来找到这个最合适的队伍数量。
就比如说,我现在有n个人,那么最多的队伍数量肯定不超过n,所以我们可以从只有1个队伍枚举到有n个队伍,肯定能找到其中一种方案符合题意。当时由于一个队伍中不能有处于倍数关系的整数,所以我们可以使用剪枝做优化,在一开始就判断,如果不符合题意就排除掉,提高效率。

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n;
int a[N];
vector<int> v[N];
int dfs(int cnt,int dep){
	if(dep==n+1){
		return true;
	}
	
	for(int i=1;i<=cnt;i++){
		bool tag=true;
		for(const auto&j:v[i]){
			if(a[dep]%j==0){
				tag=false;break;	
			}
		}
		if(!tag)continue;
		v[i].push_back(a[dep]);
		if(dfs(cnt,dep+1))return true;
		//恢复现场 
		v[i].pop_back();
	}
	return false;
}
int main(){
	ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	
	for(int i=1;i<=n;i++){
		if(dfs(i,1)){ //有i个队伍,第1层出发 
			cout<<i<<'\n';
			break;
		}
	}
	return 0;
}

标签:剪枝,return,int,DFS,dep,队伍,dfs,军训
From: https://blog.csdn.net/m0_73337964/article/details/136748310

相关文章

  • 图论:DFS与BFS
    目录1.DFS(图论)1.1.DFS过程1.2.应用2.BFS(图论)2.1.BFS过程2.2.应用2.3.双端队列BFS实现2.4.优先队列BFS(堆优化Dijkstra算法)1.DFS(图论)DFS全称是,中文名是深度优先搜索,是一种用于遍历或搜索树或图的算法。所谓深度优先,就是说每次都尝试向更深的节点走。广义上的DFS:DF......
  • 猫头虎分享已解决Bug || 分布式文件系统问题(Distributed File System Issue):DFSUnavail
    博主猫头虎的技术世界......
  • 蓝桥杯练习系统—瓷砖铺放 dfs
    问题描述有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?例如,长度为4的地面一共有如下5种铺法:4=1+1+1+14=2+1+14=1+2+14=1+1+24=2+2编程用递归的方法......
  • Hadoop大数据应用:Linux 部署 HDFS 分布式集群
    目录  一、实验1.环境2.Linux部署HDFS分布式集群3.Linux使用 HDFS文件系统二、问题1.ssh-copy-id报错2.如何禁用sshkey检测3.HDFS有哪些配置文件4.hadoop查看版本报错5.启动集群报错6.hadoop的启动和停止命令7.上传文件报错8.HDFS使用命令  ......
  • HDFSRPC协议详解
    本文主要阐述HDFSRPCserver端一个socket连接接收字节流的构成,帮助读者理解HDFSRPC协议。注意hadoop版本为3.1.1。写在前面关于proto写入和读取,使用writeDelimitedTo和read,应该是通用的方式,不作过多的介绍。处理rpc各种情况以后server都会使用统一的应答格式(包含错误与正确),......
  • 洛谷 P2730 魔板 题解 DFS(广度优先搜索)
    题目背景在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板。这是一张有 8 个大小相同的格子的魔板:12348765题目描述我们知道魔板的每一个方格都有一种颜色。这 8 种颜色用前 8 个正整数来表示。可以用颜色的序列来表示一种魔板状态,规定从魔板的左......
  • 七、hive、hdfs、hbase查询总结
    【hive】1.连接hive:hive2.hive中查询:同mysql,如select* fromtablename;  注意:hive中的操作一定要加分号;否则语句一直不结束 【hdfs】1.查询文件或目录hdfsdfs-ls目录名  如:hdfsdfs-ls/winhadoop/org/ipva_third_data/2024/03/07查看根目录hdfsdfs......
  • 开题顺序(暴搜&dfs)---牛客小白月赛69-C
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineendl'\n'#defineinf0x3f3f3f3fconstintN=2e5+5;intn,t,p;inta[N],b[N],c[N],x[N],y[N];intres,vis[N];voiddfs(ints,intm){ res=max(res,s); for(inti=1;i......
  • HDFS读数据流程、NN和2NN工作机制、DataNode工作机制、数据完整性
    HDFS读数据流程    事件描述:客户端要下载一个200m的数据文件,hdfs是如何读取的。   两个对象:一个客户端、一个集群   流程:       1.客户端创建一个分布式文件系统(DistributedFileSystem),向集群NameNode请求下载文件。       ......
  • DFS判重问题
    奇怪的电梯(洛谷)题目背景感谢@yummy提供的一些数据。题目描述呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第\(i\)层楼(\(1\lei\leN\))上有一个数字\(K_i\)(\(0\leK_i\leN\))。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上......