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 个长度单位。 然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。 请你设计一个程序…...

RK Android11 WiFi模组 AIC8800 驱动移植流程
RK Android WiFi模组 AIC8800 驱动移植流程 作者:Witheart更新时间:20250220 概要:本文介绍了基于 AIC8800D40 芯片的 WiFi6 模组 BL-M8800DS2-40 在 RK3568 平台上的驱动移植流程。主要涉及环境搭建、驱动代码分析、设备树修改、驱动编译配…...

深度学习-6.用于计算机视觉的深度学习
Deep Learning - Lecture 6 Deep Learning for Computer Vision 简介深度学习在计算机视觉领域的发展时间线 语义分割语义分割系统的类型上采样层语义分割的 SegNet 架构软件中的SegNet 架构数据标注 目标检测与识别目标检测与识别问题两阶段和一阶段目标检测与识别两阶段检测器…...

免费送源码:ava+springboot+MySQL 基于springboot 宠物医院管理系统的设计与实现 计算机毕业设计原创定制
摘 要 在当今社会,宠物已经成为人们生活中不可或缺的一部分,因此宠物健康和医疗问题也备受关注。为了更好地管理宠物医院的日常运营和提供优质的医疗服务,本研究设计并实现了一套基于Spring Boot框架的宠物医院管理系统。这一系统集成了多项功…...

【电机控制器】ESP32-C3语言模型——DeepSeek
【电机控制器】ESP32-C3语言模型——DeepSeek 文章目录 [TOC](文章目录) 前言一、简介二、代码三、实验结果四、参考资料总结 前言 使用工具: 提示:以下是本篇文章正文内容,下面案例可供参考 一、简介 二、代码 #include <Arduino.h&g…...

小型字符级语言模型的改进方向和策略
小型字符级语言模型的改进方向和策略 一、回顾小型字符级语言模型的处理流程 前文我们已经从零开始构建了一个小型字符级语言模型,那么如何改进和完善我们的模型呢?有哪些改进的方向?我们先回顾一下模型的流程: 图1 小型字符级语言模型的处理流程 (1)核心模块交互过程:…...
力扣-贪心-56 合并区间
思路 先按照左区间进行排序,然后初始化left和right,重叠时,更新right,不重叠时,收集区间 代码 class Solution { public:static bool cmp(vector<int> a, vector<int> b){if(a[0] b[0]){return a[1] &…...

vue 3D 翻页效果
<template><view class"swipe-container" touchstart"onTouchStart" touchmove"onTouchMove" touchend"onTouchEnd"><view class"page">初始页</view></view> </template><script&g…...
【系列专栏】银行信息系统研发外包风险管控-08
银行信息系统研发外包风险管控 在金融科技日新月异的当下,银行业务对信息系统的依赖程度与日俱增。为了充分利用外部专业资源,提升研发效率并合理控制成本,许多银行选择将信息系统研发外包。然而,这一策略在带来诸多便利的同时&a…...

[ComfyUI] 【AI】如何获得一张人物图片的优质描述
在使用ComfyUI时,获取一张人物图片的优质英文描述非常重要,尤其是在涉及图像生成、自动化标签和多模态AI任务时。以下是一个简单的流程,可以帮助你快速从一张人物图片中提取出精确且高质量的英文描述。 1. 打开 Hugging Face 网站 首先,您需要访问 Hugging Face 提供的 J…...

深度学习基础--ResNet网络的讲解,ResNet50的复现(pytorch)以及用复现的ResNet50做鸟类图像分类
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 如果说最经典的神经网络,ResNet肯定是一个,这篇文章是本人学习ResNet的学习笔记,并且用pytorch复现了ResNet50&…...
stack,queue,priority_queue学习知识点
容器适配器 在c常用的容器中,有的是以容器迭代器为核心,而有的则以容器适配器为核心。较为常用的就包括queue和stack。接下来我将简单的以queue和stack的模拟实现介绍其特点。 在以下的模拟实现中,class Con就是我们的容器适配器࿰…...
css特异性,继承性
html <div class"introduce"><div class"title">介绍</div><div class"card-box"><div class"card"><div class"title">管理</div></div></div> </div> scs…...

力扣hot100刷题——11~20
文章目录 11.滑动窗口最大值题目描述思路:滑动窗口单调队列code 12.最小覆盖子串题目描述思路:双指针/滑动窗口哈希code Ⅰcode Ⅱ 13.最大子数组和题目描述思路:dp/贪心code 14.合并区间题目描述思路:贪心code 15.轮转数组题目描…...

R语言Stan贝叶斯空间条件自回归CAR模型分析死亡率多维度数据可视化
全文链接:https://tecdat.cn/?p40424 在空间数据分析领域,准确的模型和有效的工具对于研究人员至关重要。本文为区域数据的贝叶斯模型分析提供了一套完整的工作流程,基于Stan这一先进的贝叶斯建模平台构建,帮助客户为空间分析带来…...

速通HTML
目录 HTML基础 1.快捷键 2.标签 HTML进阶 1.列表 a.无序列表 b.有序列表 c.定义列表 2.表格 a.内容 b.合并单元格 3.表单 a.input标签 b.单选框 c.上传文件 4.下拉菜单 5.文本域标签 6.label标签 7.按钮标签 8.无语义的布局标签div与span 9.字符实体 HTML…...
安装 Milvus Java SDK
本主题介绍如何为 Milvus 安装 Milvus Java SDK。 当前版本的 Milvus 支持 Python、Node.js、GO 和 Java SDK。 要求 Java(8 或更高版本)Apache Maven 或 Gradle/Grails 安装 Milvus Java SDK 运行以下命令安装 Milvus Java SDK。 Apache Maven &…...

云手机如何进行经纬度修改
云手机如何进行经纬度修改 云手机修改经纬度的方法因不同服务商和操作方式有所差异,以下是综合多个来源的常用方法及注意事项: 通过ADB命令注入GPS数据(适用于技术用户) 1.连接云手机 使用ADB工具连接云手机服务器,…...
牛客周赛 Round 82(思维、差分、树状数组、大根堆、前后缀、递归)
文章目录 牛客周赛 Round 82(思维、差分、树状数组、大根堆、前后缀、递归)A. 夹心饼干B. C. 食堂大作战(思维)D. 小苯的排列计数(差分、树状数组)E. 和和(大根堆,前缀和)F. 怎么写线性SPJ &…...
MQTT实现智能家居------2、写MQTT程序的思路
举个最简单的例子: 手机------服务器-------家具 我们这里只看手机和家具的客户端: 手机:1)需要连接服务器 2)需要发布指令给服务器到家里的家具 3)接受来自于家里家具的异常状况 4)保持心…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
算法刷题-回溯
今天给大家分享的还是一道关于dfs回溯的问题,对于这类问题大家还是要多刷和总结,总体难度还是偏大。 对于回溯问题有几个关键点: 1.首先对于这类回溯可以节点可以随机选择的问题,要做mian函数中循环调用dfs(i&#x…...
JavaScript 标签加载
目录 JavaScript 标签加载script 标签的 async 和 defer 属性,分别代表什么,有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …...
HTML中各种标签的作用
一、HTML文件主要标签结构及说明 1. <!DOCTYPE html> 作用:声明文档类型,告知浏览器这是 HTML5 文档。 必须:是。 2. <html lang“zh”>. </html> 作用:包裹整个网页内容,lang"z…...