牛客网 NC16407 题解:托米航空公司的座位安排问题

牛客网 NC16407 题解:托米航空公司的座位安排问题

题目分析

在这里插入图片描述

解题思路

本题可以采用深度优先搜索(DFS)来解决:

  1. 从左上角开始,按行优先顺序遍历每个座位
  2. 对于每个座位,有两种选择:
    • 选择该座位(如果满足条件)
    • 不选择该座位
  3. 使用二维数组 st[][] 记录座位状态
  4. 当选择了 K 个座位时,方案数加1

代码详解

#include <bits/stdc++.h>
using namespace std;// 全局变量定义
int n, m, k, ans;  // n行m列,选择k个座位,ans记录答案
const int N = 90;  // 数组大小
const int P = 420047;  // 取模数
int st[N][N];  // 记录座位状态// DFS函数:x,y表示当前位置,u表示已选择的座位数
void dfs(int x, int y, int u) {// 如果已经选择了k个座位,方案数+1if(u == k) {ans++;ans %= P;return;}// 如果当前列超出范围,移动到下一行第一列if(y > m) {y = 1;x++;}// 如果所有位置都遍历完,返回if(x > n) return;// 尝试选择当前位置if(!st[x-1][y] && !st[x][y-1]) {  // 检查上方和左方是否为空st[x][y] = 1;  // 标记为已选dfs(x, y+1, u+1);  // 继续搜索下一个位置st[x][y] = 0;  // 回溯,取消选择}// 不选择当前位置,继续搜索dfs(x, y+1, u);
}int main() {int t;cin >> t;  // 读入测试用例数while(t--) {cin >> n >> m >> k;  // 读入行列数和需要选择的座位数ans = 0;  // 初始化答案dfs(1, 1, 0);  // 从(1,1)开始搜索cout << ans % P << endl;  // 输出结果}return 0;
}

算法分析

  1. 时间复杂度:O(2^(M*N)),最坏情况下需要遍历所有可能的组合
  2. 空间复杂度:O(M*N),主要用于存储座位状态数组

优化建议

  1. 可以添加剪枝优化,比如:

    • 当剩余未遍历的座位数小于还需要选择的座位数时,直接返回
    • 可以预处理每个位置可以选择的座位数,提前判断是否可能达到目标
  2. 对于大规模数据,可以考虑使用动态规划或状态压缩DP来优化

注意事项

  1. 数组大小要开够,题目中说明 N*M <= 80,所以开90足够
  2. 注意取模运算,每次更新答案时都要取模
  3. 回溯时要记得恢复状态

总结

这道题目是一个典型的DFS回溯问题,通过合理的状态记录和回溯,可以有效地求解所有合法的座位安排方案。代码实现简洁,但要注意细节处理,如边界条件和状态恢复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/80827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧展馆数字孪生平台

2022年进博会上&#xff0c;国家会展中心凭借“数字孪生机器人调度平台”惊艳全球&#xff0c;实现人机协同、虚实联动的智慧运营&#xff1b;2023年天府农博园通过“BIMIoT”技术&#xff0c;贯穿展馆全生命周期管理&#xff0c;成为农业会展的数字化标杆。这些案例背后&#…

胡说八道1---豆包问答总结

用户提问 1 指令&#xff1a;25 - - [21/May/2025:01:35:45 0000] “POST /prod-api/system/base/getList HTTP/1.1” 405 559 “http://192.168.1.109:16380/login” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 …

C# AOP编程

AOP(面向切片编程的概念我这里就不介绍了&#xff0c;这里先介绍一下C#中的AOP编程框架。 1.AOP的分类 .net下支持AOP的框架很多&#xff0c;搜了一下有&#xff1a;PostSharp、AspectInjector、Fody 、Castle Windsor、Spring.NET、Ninject、Unity等&#xff0c;实现的方式主要…

linux编译安装srs

下载编译运行 git clone https://github.com/ossrs/srs.git cd srs/trunk ./configure --h265on make需要安装 yum install -y patch yum install -y unzip yum install -y tcl编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/s…

EtherNet/IP机柜内解决方案在医疗控制中心智能化的应用潜能和方向分析

引言 在数智化转型浪潮席卷各行各业的今天,医疗领域同样面临着提升运营效率、改善患者体验和加强系统可靠性的多重挑战。Rockwell Automation于2025年5月20日推出的EtherNet/IP机柜内解决方案,为医疗中心的自动化升级提供了一种创新路径。本报告将深入分析这一解决方案的核心…

大模型下载到本地

一、huggingface 方式一 from huggingface_hub import snapshot_downloadlocal_dir "./origin" model_name "Qwen/Qwen2.5-1.5B"# snapshot_download(repo_idmodel_name, cache_dirlocal_dir) model_dir snapshot_download(model_name,cache_dirlocal…

【C++】vector容器实现

目录 一、vector的成员变量 二、vector手动实现 &#xff08;1&#xff09;构造 &#xff08;2&#xff09;析构 &#xff08;3&#xff09;尾插 &#xff08;4&#xff09;扩容 &#xff08;5&#xff09;[ ]运算符重载 5.1 迭代器的实现&#xff1a; &#xff08;6&…

PostgreSQL日常维护

目录 一、PostgreSQL 概述 二、基本使用 &#xff08;一&#xff09;登录数据库 &#xff08;二&#xff09;数据库操作 1. 列出数据库 2. 创建数据库 3. 删除数据库 4. 切换数据库 5. 查看数据库大小 &#xff08;三&#xff09;数据表操作 1. 列出表 2. 创建表 …

广东省省考备考(第十六天5.21)—言语:语句排序题(听课后强化)

错题 解析 对比选项&#xff0c;确定首句。①句介绍目前人类可以利用一些技术手段进入元宇宙&#xff0c;凭借网络重新定义自己&#xff0c;体验一种全新的生活&#xff0c;②句介绍对于多数人来说&#xff0c;首先要弄清楚什么是元宇宙&#xff0c;③句介绍元宇宙是指超越现实…

高并发架构设计之限流

一、引言 再强大的系统&#xff0c;也怕流量短事件内集中爆发&#xff0c;就像银行怕挤兑一样&#xff0c;所以&#xff0c;高并发另一个必不可少的模块就是限流。限流是一种通过控制请求的速率或数量来保护系统免受过载的技术。流控的精髓是限制单位时间内的请求量&#xff0…

视频监控联网系统GB28181协议中设备控制流程详解

文章目录 9.3 设备控制9.3.1 基本要求9.3.2 命令流程9.3.2.1 无应答命令流程 9.3.3 协议接口9.3.3.1 请求命令9.3.3.2 应答命令 智联视频超融合平台介绍 9.3 设备控制 9.3.1 基本要求 控制满足以下基本要求&#xff1a; a) 源设备向目标设备发送控制命令&#xff0c;控制命令…

深入剖析原型模式:原理、实现与应用实践

在软件开发的世界里,设计模式如同建筑师手中的蓝图,为复杂系统的构建提供了行之有效的解决方案。其中,原型模式(Prototype Pattern)作为创建型设计模式的重要一员,以其独特的对象创建方式,在提高代码复用性、增强系统灵活性等方面发挥着关键作用。本文将深入剖析原型模式…

图绘Linux:基础指令脉络阁

目录 Linux命令行介绍 目录操作 ls 目录所含文件信息 ls 常用选项 pwd 在那个目录下 cd 进入目录 mkdir 创建目录 文件操作 touch 创建普通文件 echo向文件写入 cat 输出文件内容 cp 拷贝文件/目录 mv剪切重命名 rm 删除文件/目录 查找 * 匹配符 man 查找指令 …

数据分析 —— 数据预处理

一、什么是数据预处理 数据预处理&#xff08;Data Preprocessing&#xff09;是数据分析和机器学习中至关重要的步骤&#xff0c;旨在将原始数据转换为更高质量、更适合分析或建模的形式。由于真实世界的数据通常存在不完整、不一致、噪声或冗余等问题&#xff0c;预处理可以…

【Redis】哨兵(Sentinel)机制

文章目录 1. Redis Sentinel的概念1.1 基本概念1.2 引出高可用 2. Redis Sentinel的部署&#xff08;基于docker&#xff09;2.1 部署2.2 验证2.3 选举流程 Redis 的主从复制模式下&#xff0c;⼀旦主节点由于故障不能提供服务&#xff0c;需要人工进行主从切换&#xff0c;同时…

初识Linux · 五种IO模型和非阻塞IO

目录 前言&#xff1a; 五种IO模型 什么是IO IO模型 非阻塞IO 前言&#xff1a; 前文我们已经将网络的基本原理介绍完了&#xff0c;都是通过围绕TCP/IP四层协议&#xff0c;将应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层全部介绍完毕&#xff0c…

Node.js 24发布:性能与安全双提升

在科技的迅速发展中&#xff0c;Node.js作为一个备受青睐的开源跨平台Java运行环境&#xff0c;近日迎来了其24.0版本的正式发布。此次更新不仅承诺提升性能和安全性&#xff0c;还为开发者提供了更为顺畅的开发体验&#xff0c;值得我们深入探讨。 Node.js 24.0的最大亮点之一…

SLAM文献之-SuperOdometry: Lightweight LiDAR-inertial Odometry and Mapping

《Super Odometry: IMU-centric LiDAR-Visual-Inertial Estimator for Challenging Environments》是一篇旨在增强 SLAM 系统在恶劣环境下鲁棒性的工作&#xff0c;尤其关注尘雾、烟雾等遮挡条件下的鲁棒估计。下面从算法原理、公式推导、创新点和应用场景四个方面进行详细解析…

指令烧录ORIN NANO操作系统

1 概述 模组为ORIN NANO 4GB版本 Ubuntu系统为18.04虚拟机 说明&#xff1a;刷机过程会有重新连接USB的操作&#xff0c;烧写过程需要注意虚拟机提示&#xff0c;官方不建议使用虚拟机&#xff0c;建议直接使用ubuntu操作系统的机器。 2 下载烧录所需文件 进入到下载网址&am…

游戏引擎学习第287天:加入brain逻辑

Blackboard&#xff1a;动态控制类似蛇的多节实体 我们目前正在处理一个关于实体系统如何以组合方式进行管理的问题。具体来说&#xff0c;是在游戏中实现多个实体可以共同或独立行动的机制。例如&#xff0c;我们的主角拥有两个实体组成部分&#xff0c;一个是身体&#xff0…