C++:dfs,bfs各两则
1.木棒
167. 木棒 - AcWing题库
乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过 5050 个长度单位。
然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。
请你设计一个程序,帮助乔治计算木棒的可能最小长度。
每一节木棍的长度都用大于零的整数表示。

解题思路
我们先将所有木棒总长度与其中最长的木棍长度记录下来。将记录小木棍长度的数组排序,然后从最长的木棍枚举每根木棒可能的长度,优化:根据这个小木棒能不能被sum整除来进行第一次判断这个小木棒长度是否正确。进入bfs三个参数,u:构造了多少小木棍,cur:构造小木棍的长度,cnt:数组下标。
我们依次用断掉的木棍来凑出我们枚举的木棍长度并将当前枚举的木棍标记为已使用,当前木棍凑不出来就取消当前木棍的已使用标记,此处可进行一个优化:当第一个木棍与最后一个木棍搜索失败时,就一定搜不到了(第一个木棍搜不到了,那它就永远凑不出来了。最后一个也是,肯定是将前面的都用完之后再用的最后一个,不行肯定就是失败了) 优化:我们可以将长度相同的小木棍跳过,当当前凑的小木棍长度乘凑的小木棍根数等于木棒从长度时就return true; 当当前小木棍长度等于枚举的小木棍长度时就进入下一个小木棍的枚举。
AC代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;int n;
int a[100];
int len=0,sum=0;
bool judge[100];
//u:构造了多少根小木棍,cur:构造小木棍的长度,cnt:数组下标
bool dfs(int u,int cur,int cnt)
{if(cur*u==sum)//凑够了{//由于初始传入的len所以当最后一次cur==len时,没有经过下面u+1,所以u是刚好的// cout<<"u: "<<u<<endl;// for(int i=0;i<n;i++)// cout<<judge[i]<<' ';// cout<<endl;return true;}if(cur==len)//这根木棍达到len了,换下一根木棍return dfs(u+1,0,0);for(int i=cnt;i<n;i++){if(judge[i])continue;if(cur+a[i]<=len){judge[i]=true;if(dfs(u,cur+a[i],i+1))return true;//直接成功judge[i]=false;//失败了,当没用过}//第一个木棍就搜索不到答案,或者//最后一个木棍搜索失败if(!cur||cur+a[i]==len){return false;}int j=i+1;while(j<n&&a[i]==a[j]) j++;i=j-1;//将重复的i跳过,排序的作用}return false;
}int main()
{while(scanf("%d",&n)&&n!=0){sum=0;len=0;for(int i=0;i<n;i++){scanf("%d",&a[i]);sum+=a[i];//计算所有木棍总长度len=max(len,a[i]);//len肯定不能比零散的木棍小}memset(judge,false,sizeof(judge));sort(a,a+n,greater<int>());while(1){if(sum%len==0&&dfs(0,len,0))//传入len的话{cout<<len<<endl;break;}len++;}}return 0;
}
2. 飞机降落
4957. 飞机降落 - AcWing题库
有 NN 架飞机准备降落到某个只有一条跑道的机场。
其中第 ii 架飞机在 TiTi 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 DiDi 个单位时间,即它最早可以于 TiTi 时刻开始降落,最晚可以于 Ti+DiTi+Di 时刻开始降落。
降落过程需要 LiLi 个单位时间。
一架飞机降落完毕时,另一架飞机可以立即在同一时刻开始降落,但是不能在前一架飞机完成降落前开始降落。
请你判断 NN 架飞机是否可以全部安全降落。

解题思路
我们可以用一个结构体来存储输入的到达的时刻与可以盘旋的时间与下降所需的时间(根据题目可以看出,下降所需时间不算在可以盘旋的时间里)我这里用pair<int,pair<int,int>>来存储的,看起来会麻烦些。
bool dfs参数:cnt来记录有多少飞机已经降落,ti表示当前的时刻(注意:会有当前时刻到达的飞机都降落完了,就要跳到下一个时间)
每一次都要从第一架飞机开始枚举,看如果当前这架飞机没有降落并且超过了到达时间+盘旋时间就失败了返回false,判断一下时间有没有到没有到就将时间改为降落时间(上面要用一个临时变量记录时间,这里改变的也是临时变量)然后看这架飞机没走过就将其标记为走过然后递归看这里让这架飞机飞能不能让飞机全飞完,不能就取消对这架飞机的标记。当降落的飞机==飞机总数时就返回true,根据返回值输出 YES或NO
AC代码
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int t;
int n;
pair<int,pair<int,int>> car[15];
bool st[15];//判断飞机是否降落//cnt判断有几架飞机降落了,ti是时间
bool dfs(int cnt,int ti)
{if(cnt==n) return true;for(int i=0;i<n;i++){int tmp=ti;//可能有的飞机没到点需要改成到的时刻if(!st[i]&&ti>car[i].first+car[i].second.first)//这一架没降落,并且时间超时return false;if(tmp<car[i].first)//现在没到i这架飞机的到达时刻tmp=car[i].first;if(!st[i]){st[i]=true;if(dfs(cnt+1,tmp+car[i].second.second)) return true;st[i]=false;}}return false;
}
int main()
{scanf("%d",&t);while(t--){scanf("%d",&n);//分别是到达的时刻,还能停留的时间,降落所需时间for(int i=0;i<n;i++)scanf("%d%d%d",&car[i].first,&car[i].second.first,&car[i].second.second);memset(st,false,sizeof st);if(dfs(0,0)) printf("YES\n");else printf("NO\n");}return 0;
}
3. 母亲的牛奶
1355. 母亲的牛奶 - AcWing题库
农夫约翰有三个容量分别为 A,B,CA,B,C 升的挤奶桶。
最开始桶 AA 和桶 BB 都是空的,而桶 CC 里装满了牛奶。
有时,约翰会将牛奶从一个桶倒到另一个桶中,直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。
这一过程中间不能有任何停顿,并且不会有任何牛奶的浪费。
请你编写一个程序判断,当 AA 桶是空的时候,CC 桶中可能包含多少升牛奶,找出所有的可能情况。

解题思路
这几个桶只要有牛奶可以互相倒牛奶,只有两种可能把要倒的桶倒满或者把自己倒空
用一个结构体包含abc代表当前各个瓶子奶的容量,由于数据量很小所以我们可以用一个三维数组来存它的状态,创建一个队列存上面的结构体,枚举一个瓶子倒一个瓶子接(不能是同一个瓶子),根据要倒牛奶瓶子的牛奶量和要接牛奶瓶子的剩余空间,来更新队列依次直到队列空。
我们遍历状态数组,输出所有当A瓶子为空时有过的C的值
AC代码
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
struct node
{int a,b,c;//记录当前a,b,c分别多少牛奶
};
int A,B,C;
bool st[25][25][25];//当值为true说明三个下标表示三个杯子分别盛的容量
queue<node> q;
int bfs(int a,int b,int c)
{q.push({a,b,c});//入队int val[3]={A,B,C};st[a][b][c]=true;while(!q.empty()){node t=q.front();q.pop();for(int i=0;i<3;i++)//枚举第i个桶向第j个桶里倒牛奶{for(int j=0;j<3;j++){if(i!=j)//不能自己给自己倒{int s[3]={t.a,t.b,t.c};if(s[i]==0)continue;//比较i个桶剩的牛奶,与第j桶还能放进去的牛奶,哪个更少int cmp=min(s[i],val[j]-s[j]);s[i]-=cmp;//i桶减去s[j]+=cmp;//j桶加上if(!st[s[0]][s[1]][s[2]]){st[s[0]][s[1]][s[2]]=true;q.push({s[0],s[1],s[2]});}}}}}
}int main()
{scanf("%d%d%d",&A,&B,&C);//分别能存储的容量bfs(0,0,C);for(int j=0;j<=C;j++){for(int i=0;i<=B;i++){if(st[0][i][j])printf("%d ",j);}}return 0;
}
4. 全球变暖
1233. 全球变暖 - AcWing题库
你有一张某海域 N×NN×N 像素的照片,”.”表示海洋、”#”表示陆地,如下所示:
.......
.##....
.##....
....##.
..####.
...###.
.......
其中”上下左右”四个方向上连在一起的一片陆地组成一座岛屿,例如上图就有 22 座岛屿。
由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。
具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。
例如上图中的海域未来会变成如下样子:
.......
.......
.......
.......
....#..
.......
.......
请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。

解题思路
就是遍历所有的大陆,查看陆地数量与临海的陆地数量是否相同,其余就是普通的洪水覆盖模板
AC代码
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;int n;
char map[1010][1010];
int dx[4]={1,0,0,-1};
int dy[4]={0,1,-1,0};
queue<pair<int,int>> qu;
bool states[1010][1010];int cnt=0;
void bfs(int x,int y,int &sum1,int &sum2)
{qu.push({x,y});states[x][y]=true;while(!qu.empty()){auto t=qu.front();sum1++;qu.pop();bool falg=false;for(int i=0;i<4;i++){int a=t.first+dx[i];int b=t.second+dy[i];if(a<0||b<0||a>=n||b>=n) continue;if(states[a][b]) continue;//已经走过的if(map[a][b]=='.'){falg=true;//说明上一个邻海continue;}qu.push({a,b});states[a][b]=true;}if(falg) sum2++;//统计临海的数量}if(sum2==sum1)cnt++;}int main()
{scanf("%d",&n);for(int i=0;i<n;i++){for(int j=0;j<n;j++){ cin>>map[i][j];}}for(int i=0;i<n;i++){for(int j=0;j<n;j++){ int cnt1=0;//记录岛屿边缘数量int cnt2=0;//记录岛屿陆地数量if(!states[i][j]&&map[i][j]=='#')bfs(i,j,cnt1,cnt2);} }cout<<cnt<<endl;return 0;
}
相关文章:
C++:dfs,bfs各两则
1.木棒 167. 木棒 - AcWing题库 乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过 5050 个长度单位。 然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。 请你设计一个程序…...
Python在实际工作中的运用-通用格式CSV文件自动转换XLSX
继续上篇《Python在实际工作中的运用-CSV无损转XLSX的几个方法》我们虽然对特定格式的CSV实现了快速转换XLSX的目标,但是在运行Py脚本前,还是需要编辑表格创建脚本和数据插入脚本,自动化程度很低,实用性不强,为减少人工提高效率,实现输入CSV文件路径即可自动适配完成转换…...
P9420 [蓝桥杯 2023 国 B] 子 2023
P9420 [蓝桥杯 2023 国 B] 子 2023 题目 分析代码 题目 分析 刚拿到这道题,我大脑简单算了一下,这个值太大了,直观感觉就很难!! 但是,你仔仔细细的一看,先从最简单的第一步入手,再…...
2025-02-26 学习记录--C/C++-C语言 判断字符串S2是否在字符串S1中
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 C语言 判断字符串S2是否在字符串S1中 #include <stdio.h> // 引入标准输入输出库,用于使用 printf 等函数 #…...
004 Kafka异常处理
6.异常处理 文章目录 6.异常处理1.异常分类与处理原则2.生产者异常处理1. 同步发送捕获异常2. 异步发送回调处理 3.消费者异常处理1.全局异常处理器2.方法级处理3.重试yml配置 4.死信队列(DLQ)配置1. 启用死信队列2. 手动发送到DLQ 5.事务场景异常处理1.…...
创建第一个 Maven 项目(二)
六、添加依赖 在 Maven 项目开发过程中,添加依赖是一项常见且关键的操作。通过添加依赖,我们可以引入项目所需的各种库和框架,极大地扩展项目的功能。接下来,我们将以 JUnit 依赖为例,详细介绍如何在 Maven 项目中添加…...
游戏引擎学习第124天
仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾/复习 今天是继续完善和调试多线程的任务队列。之前的几天,我们已经介绍了多线程的一些基础知识,包括如何创建工作队列以及如何在线程中处理任务。今天,重点是解决那些我们之前没有注意到…...
组件的组成和组件的嵌套关系
组件的组成 首先建一个.vue文件,在里面写一个内容: <template> <div><div class"container">{{ message }}</div> </div> </template> <script> export default{data(){return{message:"组件…...
2025 PHP授权系统网站源码
2025 PHP授权系统网站源码 安装教程: PHP7.0以上 先上传源码到服务器,然后再配置伪静态, 访问域名根据操作完成安装, 然后配置伪静态规则。 Ngix伪静态规则: location / { if (!-e $request_filename) { rewrite …...
KIMI K1.5:大规模强化学习在大语言模型中的应用与工程实践
目录 1、核心技术创新:长上下文强化学习 2、策略优化的技术细节 2.1、在线镜像下降变体 2.2、长度惩罚机制 2.3、智能采样策略 3、工程架构创新 3.1、混合部署框架 3.2、代码沙箱与奖励模型 3.3、分布式系统架构 4、实验成果与性能提升 5、结论与未来展望 大语言模…...
Linux MySQL 8.0.29 忽略表名大小写配置
Linux MySQL 8.0.29 忽略表名大小写配置 问题背景解决方案遇到的问题: 问题背景 突然发现有个大写的表报不存在。 在Windows上,MySQL是默认支持忽略大小写的。 这个时候你要查询一下是不是没有配置: SHOW VARIABLES LIKE lower_case_table…...
Vue 中,使用模板(Template) 和 Render 函数编写组件的区别
在 Vue 2 中,模板(Template) 和 Render 函数 是两种不同的组件编写方式,它们各有特点和适用场景。以下是它们的核心区别和实际应用场景分析: 1. 基本区别 特性模板(Template)Render 函数语法形…...
大白话Vuex 核心概念(state、mutations、actions)的使用案例与原理
大白话Vuex 核心概念(state、mutations、actions)的使用案例与原理 Vuex是Vue.js应用程序中专门用来管理状态的工具,就好像是一个大管家,帮你把项目里一些重要的数据和操作管理得井井有条。下面用大白话结合案例来介绍Vuex核心概…...
ElasticSearch查询指南:从青铜到王者的骚操作
ElasticSearch查询指南:从青铜到王者的骚操作 本文来源于笔者的CSDN原创,由于掘金>已经去掉了转载功能,所以只好重新上传,以下图片依然保持最初发布的水印(如CSDN水印)。(以后属于本人原创均…...
财务运营域——营收稽核系统设计
摘要 本文主要介绍了营收稽核系统的背景、特点与作用。营收稽核系统的产生源于营收管理复杂性、财务合规与审计需求、提升数据透明度与决策效率、防范舞弊与风险管理、技术进步与自动化需求、多元化业务模式以及跨部门协作与数据整合等多方面因素。其特点包括自动化与智能化、…...
30 分钟从零开始入门 CSS
HTML CSS JS 30分钟从零开始入门拿下 HTML_html教程-CSDN博客 30 分钟从零开始入门 CSS-CSDN博客 JavaScript 指南:从入门到实战开发-CSDN博客 前言 最近也是在复习,把之前没写的博客补起来,之前给大家介绍了 html,现在是 CSS 咯…...
threejs:document.createElement创建标签后css设置失效
vue3threejs,做一个给模型批量CSS2D标签的案例,在导入模型的js文件里,跟着课程写的代码如下: import * as THREE from three; // 引入gltf模型加载库GLTFLoader.js import { GLTFLoader } from three/addons/loaders/GLTFLoader.…...
【GESP】C++三级练习 luogu-p1567, 统计天数
GESP三级,一维数组,多层循环和分支练习,难度★✮☆☆☆。 题目题解详见:https://www.coderli.com/gesp-3-luogu-p1567/ 【GESP】C三级练习 luogu-p1567, 统计天数 | OneCoderGESP三级,一维数组,多层循环和…...
springboot集成deepseek4j
1、文档地址 快速开始 - 零基础入门Java AI 免费的模型 Models 2、pom文件依赖 parent依赖 <dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.12.0</version></dependency>&…...
SpringBoot中报错:JSON parse error: Unrecognized filed 异常原因和解决方案
问题描述 当使用Spring Boot或其他JSON解析库(如Jackson)将JSON字符串反序列化为Java对象时,可能会遇到以下异常: JSON parse error: Unrecognized field "<fieldName>" (class <ClassName>), not marked…...
【数据分析】4 商业数据分析技能模型总结
优秀的商业分析师需要具备的能力 数据分析能力逻辑思维能力赢得结果能力 一、数据分析能力扩展:工具链生态与进阶场景 1. 数据获取技术升级 企业级数据源管理: 数据湖架构(AWS S3/阿里云OSS)与数据仓库(Snowflake/R…...
vue+element-dialog:修改关闭icon / 遮罩层不能挡住弹窗 / 遮罩层不能遮挡元素
一、是否显示操作按钮 二、修改dialog默认关闭icon .el-dialog__headerbtn {top: 15px !important;width: 18px;height: 18px;background: url(~assets/img/formworkManagement/close-button.png) left no-repeat;background-size: cover; } .el-dialog__headerbtn i {content…...
Linux系统之DHCP网络协议
目录 一、DHCP概述 二、DHCP部署实操 2.1、安装DHCP软件 2.2、拷贝配置文件 2.3、配置文件详解 2.4、重启软件服务 2.5、新开一台服务器,查看dhcp地址获取 一、DHCP概述 DHCP(Dynamic Host Configuration Protocol)是一种应用层网络协…...
夜莺监控 - 边缘告警引擎架构详解
前言 夜莺类似 Grafana 可以接入多个数据源,查询数据源的数据做告警和展示。但是有些数据源所在的机房和中心机房之间网络链路不好,如果由 n9e 进程去周期性查询数据并判定告警,那在网络链路抖动或拥塞的时候,告警就不稳定了。所…...
DeepSeek-R1-671B大模型满血版私有化部署高可用教程-SparkAi系统集成图文教程
DeepSeek官网服务器繁忙的主要原因是由于用户数量激增导致的服务器资源紧张。为了解决这一问题,DeepSeek团队已经暂停了API服务充值,以避免对用户造成业务影响。目前,存量充值金额仍可继续调用,但充值功能暂时不可用。 DeepSe…...
kubernetes 初学命令
基础命令 kubectl 运维命令常用: #查看pod创建过程以及相关日志 kubectl describe pod pod-command -n dev #查看某个pod,以yaml格式展示结果 kubectl get pod nginx -o yaml #查看pod 详情 以及对应的集群IP地址 kubectl get pods -o wide 1. kubetc…...
学习笔记05——HashMap实现原理及源码解析(JDK8)
HashMap实现原理及源码解析(JDK8) 一、核心设计思想 数组链表红黑树:桶数组存储Node节点,哈希冲突时形成链表,链表长度≥8且桶数量≥64时转红黑树扰动函数:(h key.hashCode()) ^ (h >>> 16) 消除…...
React面试(一)
文章目录 1.vue和react有什么异同2.useEffect中为什么不能使用异步3.useEffect和useLayoutEffect的区别4.react的生命周期5.state和prop的区别6.受控组件和非受控组件7.为什么react16之后不把事件挂载到document上了8.讲一下react的hoc,它可以用来做什么?…...
Redis分布式缓存面试题
为什么使用分布式缓存? 1. 提升性能 降低延迟:将数据缓存在离应用更近的地方,减少数据访问时间。减轻数据库压力:缓存频繁访问的数据,减少对后端数据库的请求,提升系统响应速度。 2. 扩展性 水平扩展&a…...
AI 编码 2.0 分析、思考与探索实践:从 Cursor Composer 到 AutoDev Sketch
在周末的公司【AI4SE 效能革命与实践:软件研发的未来已来】直播里,我分享了《AI编码工具 2.0 从 Cursor 到 AutoDev Composer》主题演讲,分享了 AI 编码工具 2.0 的核心、我们的思考、以及我们的 AI 编码工具 2.0 探索实践。 在这篇文章中&am…...
