【蓝桥备赛】数字王国之军训排队——DFS深度优先搜索

2024-01-31 00:44

本文主要是介绍【蓝桥备赛】数字王国之军训排队——DFS深度优先搜索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接

数字王国之军训排队

个人思路

一般最坏情况,就是这几个数都存在倍数关系,那么就是 n 个数分成 n 个队。然后本题 n 的范围不大,可以枚举 1 ~ n 得到,如果数字范围大可以考虑进行二分。从 1 ~ n ,第一次满足条件的队伍数,即答案,输出即可。
对于每一种队伍情况,使用dfs遍历每个数可以存放的队列,如果当前队列存在能被整除的数,则换下一个队;如果能放入当前队,则继续看下一个数。
先放入大的数,再放入小的数,肯定较小的数除以较大的数无法整除,所以需要先对数组排序。

	for(int i = 1; i <= team; ++i){int flag = 1;for(const auto j : record[i]){if(arr[x] % j == 0){flag = 0;break;} }if(flag){record[i].push_back(arr[x]);if(dfs(x + 1, team))return true;record[i].pop_back();}}

参考代码

Java

import java.io.*;
import java.util.*;public class Main {static int n;static int[] arr;static List<Integer>[] record;static boolean dfs(int now, int team) {if (now == n) return true;for (int i = 0; i < team; i++) {List<Integer> list = record[i];boolean flag = true;for (int j : list) {if (arr[now] % j == 0) {flag = false;break;}}if (flag) {list.add(arr[now]);if (dfs(now + 1, team)) {return true;}list.remove(list.size() - 1);}}return false;}public static void main(String[] args) {Scanner sc = new Scanner();n = sc.nextInt();record = new ArrayList[n];for (int i = 0; i < n; i++) {record[i] = new ArrayList<>();}arr = new int[n];for (int i = 0; i < n; i++) {arr[i] = sc.nextInt();}Arrays.sort(arr);for (int i = 1; i <= n; ++i) {if (dfs(0, i)) {System.out.println(i);break;}}}
}
class Scanner {static StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));public int nextInt() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (int) st.nval;}
}

C/C++

#include<bits/stdc++.h>
using namespace std;
const int N = 15;
int n, arr[N];
vector<int> record[N];int dfs(int x, int team)
{if(x == n + 1)return true;for(int i = 1; i <= team; ++i){int flag = 1;for(const auto j : record[i]){if(arr[x] % j == 0){flag = 0;break;} }if(flag){record[i].push_back(arr[x]);if(dfs(x + 1, team))return true;record[i].pop_back();}}return false;
}int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n;for(int i = 1; i <= n; ++i) cin >> arr[i];sort(arr + 1, arr + 1 + n);for(int i = 1; i <= n; ++i){if(dfs(1, i)) {cout << i;return 0;}}
}

这篇关于【蓝桥备赛】数字王国之军训排队——DFS深度优先搜索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/662075

相关文章

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。