蓝桥杯-dfs搜索模板题(一)

蓝桥杯-dfs搜索模板题(一)

  • P2089 烤鸡
  • P1088 火星人
  • P1149 火柴棒等式
  • P2036 PERKET
  • P1135 奇怪的电梯
  • 结语

P2089 烤鸡

在这里插入图片描述
对于每个位置枚举数字

#include<bits/stdc++.h>

using namespace std;
 
 const int N=10+10;
 
 int n;
 int arr[N];//临时方案 
 int res=0;//方案数
 int mem[1000000][N];//所有方案 
 
 void dfs(int x,int sum)//x是位数,sum是已选的总质量 
 {
 	if(sum>n)return;
	
	if(x>10)
	{
		
		if(sum==n)
		{
			res++;
			for(int i=1;i<=10;i++)
			{
				mem[res][i]=arr[i];
			}
			
		}
		return;
	}
 	for(int i=1;i<=3;i++)
	 {
	 	arr[x]=i;
	 	dfs(x+1,sum+i);
	 	arr[x]=0;
	 } 
 }
 int main()
 {
 	scanf("%d",&n);
 	dfs(1,0);
 	printf("%d\n",res);
 	for(int i=1;i<=res;i++)
 	{
 		for(int j=1;j<=10;j++)
 		{
 			printf("%d ",mem[i][j]);
		}
		printf("\n");
	}

 			
 		
 	return 0;
  } 

P1088 火星人

在这里插入图片描述
在这里插入图片描述
本质也是对着位置枚举数字但是是在火星人给定的基础上,不然要搜索的太多了会爆

#include<bits/stdc++.h>
using namespace std;

int n, m, res;
const int N = 10010;
int arr[N];
int mars[N];
bool st[N];
bool return0 = false;

void dfs(int x)
{
	if (return0)return;//找到之后就不用往后搜了 
	//跟上面那个不一样,这个位数最多有10000太多了不能全部遍历 
	if (x > n)
	{
		res++;
		if (res == m + 1)
		{
			return0 = true;
			for (int i = 1; i <= n; i++)
			{
				cout << arr[i] << ' ';
			}

		}
		return;
	}
	for (int i = 1; i <= n; i++)
	{
		if (!res)
		{
			i = mars[x];//从火星人给的开始枚举 
		}
		if (!st[i])
		{
			st[i] = true;
			arr[x] = i;
			dfs(x + 1);
			st[i] = false;
			arr[x] = 0;
		}
	}
}


int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)cin >> mars[i];
	dfs(1);
	return 0;
}

P1149 火柴棒等式

在这里插入图片描述
按照题目要求去搜索暴力。
经验之谈,最多应是711,多试几个可以试出来

#include<bits/stdc++.h>
using namespace std;
const int N= 10010;
int n;
int arr[N];
int res=0;
int nums[N]={6,2,5,5,4,5,6,3,7,6};//存火柴棍 

int col(int x)//计算火柴棍数量 
{
	if(nums[x]) return nums[x];
	else
	{
		int sumfire=0;
		while(x)
		{
			sumfire+=nums[x%10];
			x/=10;
		}
		return sumfire;
	} 
}

void dfs(int x,int sum)
{
	
	if(sum>n) return ;
	if(x>3)
	{
		if(arr[1]+arr[2]==arr[3]&&sum==n)
		{
			res++;
		}
		return;
	}
	for(int i=0;i<=1000;i++) 
	{
		arr[x]=i;
		dfs(x+1,sum+nums[i]);
		arr[x]=0;
	}
}


int main()
{
	cin>>n;
	n-=4;
	
	for(int i=10;i<=1000;i++)
	{
		nums[i]=nums[i%10]+nums[i/10];
	}
	
	
	dfs(1,0); 	
	
	cout<<res;
	return 0;
	
}

P2036 PERKET

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;

const int N=20;

int n;

int acid[N],bitter[N];
int res=1e9;//存答案 
int st[N];//0未考虑 1选2不选


void dfs(int x)
{
	if(x>n)
	{
		bool has=false;
		int sum1=1;//酸度之积 
		int sum2=0;//苦度之和
		for(int i=1;i<=n;i++)
		{
			
			if(st[i]==1)
			{
				has=true;
				
				sum1*=acid[i];
				sum2+=bitter[i];	
			}
			
			
		}
		
		if(has) res=min(res,abs(sum1-sum2));//有得选才走,啥都不选返回1没价值
		return ; 
	}
	//选
	st[x]=1;
	dfs(x+1);
	st[x]=0;
	//不选
	st[x]=2;
	dfs(x+1);
	st[x]=0;
}


int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)cin>>acid[i]>>bitter[i];
	
	dfs(1);
	cout<<res;
	return 0;
}

P1135 奇怪的电梯

在这里插入图片描述
每层只走一次的方案一定比每次重复走的方案好,用st来记录有没有走过。
这道题用以下代码只能过一部分,也是暴力的局限之处。得有更好的优化或其他方法

#include<bits/stdc++.h>
using namespace std;
const int N=10010;

int n,A,B;
int evlt[N];
int res=1e9;
bool st[N];
//当前在x楼,按了cnt次按钮 
void dfs(int x,int cnt)
{
	if(cnt>=res)return;
	if(x>n||x<0)return ;
	if(x==B)
	{
		res=min(res,cnt);
		return ;
	} 
	
	//上
	if(x+evlt[x]<=n&&!st[x+evlt[x]])
	{
		st[x+evlt[x]]=true;
		dfs(x+evlt[x],cnt+1); 
		st[x+evlt[x]]=false;
	}	
	//下
	if(x-evlt[x]>0&&!st[x-evlt[x]])
	{
		st[x-evlt[x]]=true;
		dfs(x-evlt[x],cnt+1); 
		st[x-evlt[x]]=false;
	}
		
}

int main()
{
	cin>>n>>A>>B;
	for(int i=1;i<=n;i++)
	{
		cin>>evlt[i];
	}
	dfs(A,0);
	if(res==1e9)
	{
		cout<<-1;
		return 0;
	}
	
	cout<<res;
	
	return 0;
	
}


结语

整理自链接: link

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【闲聊】-网页划词翻译插件

英文之痛 作为程序猿&#xff0c;常常需要接触外文网站&#xff0c;以前很痛苦&#xff0c;现在大模型时代有很多智能工具可以直接翻译&#xff0c;翻译的虽然越来越好&#xff0c;但是还是不如直接看英文能理解本义&#xff0c;相信我&#xff0c;看翻译的理解和看原文的理解…

AJAX —— 学习(二)

目录 一、利用 JSON 字符串 返回数据 &#xff08;一&#xff09;基础代码 &#xff08;二&#xff09;原理及实现 二、nodmon 工具 自动重启服务 &#xff08;一&#xff09;用途 &#xff08;二&#xff09;下载 &#xff08;三&#xff09;使用 三、IE 缓存问题 &a…

开源模型应用落地-chatglm3-6b模型小试-入门篇(一)

一、前言 刚开始接触AI时&#xff0c;您可能会感到困惑&#xff0c;因为面对众多开源模型的选择&#xff0c;不知道应该选择哪个模型&#xff0c;也不知道如何调用最基本的模型。但是不用担心&#xff0c;我将陪伴您一起逐步入门&#xff0c;解决这些问题。 在信息时代&#xf…

ADB 命令之 模拟按键/输入

ADB 命令之 模拟按键/输入 模拟按键/输入 在 ​​adb shell​​​ 里有个很实用的命令叫 ​​input​​&#xff0c;通过它可以做一些有趣的事情。 ​​input​​ 命令的完整 help 信息如下&#xff1a; Usage: input [<source>] <command> [<arg>...] Th…

MySQL 中将使用逗号分隔的字段转换为多行数据

在我们的实际开发中&#xff0c;经常需要存储一些字段&#xff0c;它们使用像, - 等连接符进行连接。在查询过程中&#xff0c;有时需要将这些字段使用连接符分割&#xff0c;然后查询多条数据。今天&#xff0c;我们将使用一个实际的生产场景来详细解释这个解决方案。 场景介绍…

数据结构——红黑树详解

一、红黑树的定义 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出两倍&#xff0c…

转专业:集成电路、微电子、电子信息选哪个?

目录 集成电路专业 微电子技术专业 电子信息工程专业 综合分析 在考虑转专业到集成电路、微电子或电子信息时&#xff0c;您需要考虑多个因素&#xff0c;包括个人兴趣、专业课程内容、行业前景以及未来就业市场的需求。以下是关于这三个专业的详细分析&#xff0c;以及它们…

酷开科技智慧AI让酷开系统大显身手!

时代的浪潮汹涌而至&#xff0c;人工智能作为技术革新和产业变革的重要引擎&#xff0c;正深刻地影响着各行各业。在科技的海洋中&#xff0c;AI技术正逐渐渗透到我们的日常生活中&#xff0c;为我们带来前所未有的便捷和智慧。酷开科技用技术探索智慧AI&#xff0c;别看它只是…

让六西格玛培训有效的三个步骤,拿走不谢!

近年来&#xff0c;六西格玛作为一种先进的质量管理方法&#xff0c;被众多企业视为提升产品质量、优化流程、减少浪费的利器。然而&#xff0c;如何使六西格玛培训真正落地生根&#xff0c;发挥出其应有的效果&#xff0c;成为了许多企业关注的焦点。本文&#xff0c;天行健Si…

Java零基础入门到精通_Day 4

方法的重载 就是同一个类中的相同方法名的多个方法&#xff0c;但是他们的参数不同&#xff0c;类型不同或者参数个数不同。 &#xff08;与返回值无关&#xff09; package Base_One;public class Base_005 {public static void main(String[] args) {// Main method logic …

探析Drools规则引擎的工作机制

目录 一、工作原理 二、工作流程 2.1 初始化环境 2.2 添加规则文件 2.3 编译规则文件 2.4 插入到工作内存 2.5 规则匹配与激活 2.6 规则执行 三、Drools 其他特性 3.1 符合事实 3.2 决策表 3.3 规则生命周期管理 3.4 规则流 四、Rete 算法 一、工作原理 Drools 规则引擎的工…

如何理解Java注解反射

Java 8 中文版 - 在线API手册 - 码工具 什么是注解 ◆Annotation是从JDK5.0开始引入的新技术 ◆Annotation的作用: 不是程序本身&#xff0c;可以对程序作出解释.(这一点和注释(comment)没什么区别) 可以被其他程序(比如:编译器等)读取 Annotation的格式: > 注解是以&quo…

OSError: Can‘t load tokenizer for ‘bert-base-chinese‘

文章目录 OSError: Cant load tokenizer for bert-base-chinese1.问题描述2.解决办法 OSError: Can’t load tokenizer for ‘bert-base-chinese’ 1.问题描述 使用from_pretrained()函数从预训练的权重中加载模型时报错&#xff1a; OSError: Can’t load tokenizer for ‘…

数据结构栈和堆列

目录 栈&#xff1a; 栈的概念&#xff1a; 栈的实现&#xff1a; 栈接口的实现&#xff1a; 1.初始化栈&#xff1a; 2.入栈&#xff1a; 3.出栈&#xff1a; 4. 获取栈顶元素&#xff1a; 5.获取栈中有效数据的个数&#xff1a; 6.检测栈是否为空&#xff0c;如果为…

搜索二维矩阵 II - LeetCode 热题 21

大家好&#xff01;我是曾续缘&#x1f497; 今天是《LeetCode 热题 100》系列 发车第 21 天 矩阵第 4 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&…

20240402—Qt如何通过动态属性设置按钮样式?

前言 正文 1、点击UI文件 2、选择Bool型或是QString 3、设置后这里出现动态属性 4、这qss文件中绑定该动态属性 QPushButton[PopBlueBtn"PopBlueBtn"]{background-color:#1050B7;color:#FFFFFF;font-size:20px;font-family:Source Han Sans CN;//思源黑体 CNbor…

Ansys Zemax | 如何将光栅数据从Lumerical导入至OpticStudio(上)

附件下载 联系工作人员获取附件 本文介绍了一种使用Ansys Zemax OpticStudio和Lumerical RCWA在整个光学系统中精确仿真1D/2D光栅的静态工作流程。将首先简要介绍方法。然后解释有关如何建立系统的详细信息。 本篇内容将分为上下两部分&#xff0c;上部将首先简要介绍方法工…

01 Python进阶:正则表达式

re.match函数 使用 Python 中的 re 模块时&#xff0c;可以通过 re.match() 函数来尝试从字符串的开头匹配一个模式。以下是一个简单的详解和举例&#xff1a; import re# 定义一个正则表达式模式 pattern r^[a-z] # 匹配开头的小写字母序列# 要匹配的字符串 text "h…

程序的编译、链接过程分析(简洁浓缩版)!

《嵌入式工程师自我修养/C语言》系列——程序的编译、链接过程分析&#xff08;简洁浓缩版&#xff09;&#xff01; 一、程序的编译1.1 预编译指令 pragma1.2 编译过程概述1.3 符号表和重定位表 二、程序的链接2.1 分段组装2.2 符号决议2.2.1 强符号与弱符号2.2.2 GNU编译器的…

了解与生成火焰图

目录 一、如何看懂火焰图 1、基本特征 2、基本分类 二、如何生成火焰图 1、捕获调用栈 2、折叠栈 3、转换为 svg 格式 4、展示 svg 一、如何看懂火焰图 1、基本特征 &#xff08;1&#xff09;纵轴&#xff1a;即每一列代表一个调用栈&#xff0c;每一个格子代表一个函…