蓝桥杯-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

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

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

相关文章

蓝桥杯题目中的二分查找

前言 众所周知蓝桥杯会暴力&#xff0c;那么拿奖也是很轻松&#xff0c;甚至拿省一&#xff0c;有些题甚至直接用暴力就是对的&#xff0c;二分查找就是暴力中常用的算法&#xff0c;这篇文章就用蓝桥杯中的题目去介绍如何用二分查找去解题&#xff0c;对于二分查找的基础知识…

163 Linux C++ 通讯架构实战17,本地套接字整理对比,IPC:pipe,fifo,mmap,信号,本地套

IPC&#xff1a; Linux环境下&#xff0c;进程地址空间相互独立&#xff0c;每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到&#xff0c;所以进程和进程之间不能相互访问&#xff0c;要交换数据必须通过内核&#xff0c;在内核中开辟一块缓冲…

并发编程三大特性之可见性

一、什么是可见性&#xff1f; 可见性问题是基于CPU位置出现的&#xff0c;cpu处里速度非常快&#xff0c;相对CPU来说去主内存 获取数据这个事情太慢了&#xff0c;CPU就提供了 L1&#xff0c;L2&#xff0c;L3的三季缓存&#xff0c;每次去主内存拿完 数据后&#xff0c;数据…

MBTI职业性格测试:发现你的内在力量,探索职业新世界!

MBTI简介 MBTI是根据荣格的心理类型理论著成&#xff0c;已经成为权威的性格测试。 MBTI&#xff08;Myers-Briggs Type Indicator&#xff09;&#xff0c;是一种迫选型、自我报告式的性格评估测试&#xff0c;用以衡量和描述人们在获取信息、作出决策、对待生活等方面的心理…

【从零到一手撕脚手架 | 第五节】自定义命令行下载cli工具

【从零到一手撕脚手架 | 第五节】自定义命令行下载cli工具 Hello大家好我是⛄&#xff0c;之前我们已经成功搭建了一套Vue3的快速开发模板&#xff0c;提高我们搭建新项目的效率&#xff0c;但是当我们的模板逐渐增多&#xff0c;如果依然使用git clone的方式去下载模板较为繁琐…

使用LIKE进行模糊查询

查询包含字符‘e’的信息 % 代表不确定个数的字符&#xff08;零个或多个&#xff09; SELECT employee_id, first_name FROM employees WHERE first_name LIKE %e%; 查询以字符‘e’开头的字符 SELECT employee_id, first_name FROM employees WHERE first_name LIKE e%; _…

腾讯云2024年优惠券领取及使用常见问题

腾讯云作为国内领先的云计算服务提供商&#xff0c;经常会推出各种优惠活动&#xff0c;以此来吸引用户上云。其中&#xff0c;优惠券作为一种常见的促销方式&#xff0c;受到了众多用户的青睐。然而&#xff0c;在领取和使用优惠券的过程中&#xff0c;大家可能会遇到一些常见…

1.《C语言》—— [常见概念]

前言: C语言是学习编程的一门语言&#xff0c;C语言概念少&#xff0c;词汇少&#xff0c;包含了基本的编程元素&#xff0c;再后来的很多语言如&#xff08;C&#xff0c;Java&#xff09;等都参考了C语言&#xff0c;所以想要学好编程&#xff0c;C语言是必不可少的一门&…

77、WAF攻防——权限控制代码免杀异或运算变量覆盖混淆加密传参

文章目录 WAF规则webshell免杀变异 WAF规则 函数匹配 工具指纹 webshell免杀变异 php 传参带入 eval可以用assert来替换,assert也可以将字符串当作php代码执行漏洞 php 变量覆盖 php 加密 使用加密算法对php后门进行加密 php 异或运算 简化:无字符webshellP 无数字字母rc…

《米小圈上学记》——让孩子爱上阅读一点也不难!

阅读能力的培养是小学语文素质教育重要的组成部分&#xff0c;阅读能力的高低&#xff0c;直接关系到学生的理解能力、运用知识的能力以及表达能力的提升。提高小学生的阅读能力不仅关系到小学生语文素养的培养&#xff0c;而且对他们开阔视野、提高内涵、增加底蕴、放飞心灵有…

hibernate执行外部sql

开发背景 公司多年前项目&#xff0c;使用hibernate作为持久层&#xff0c;部分sql查询采用spring的JdbcTemplate&#xff0c;sql穿插在java代码中。因此&#xff0c;需要统一使用hibernate&#xff0c;并且sql部分需要类似Mybatis一样从文件中读取。由于引入Mybatis需要对项目…

哈希存节点,双dp数组存选和不选

小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连…

Linux:安装zabbix-agent被监控端(2)

本章是结合着上一篇文章的续作 Linux&#xff1a;部署搭建zabbix6&#xff08;1&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/137426966?spm1001.2014.3001.5501本章将在两台centos部署agent端&#xff0c;然后使用server进行连接监控 agent1 在1…

11、子串-滑动窗口最大值

题解&#xff1a; 双端队列是一种特殊的队列&#xff0c;允许你在队列的两端进行插入和删除操作。在滑动窗口问题中&#xff0c;我们使用它来存储可能是当前窗口最大值的元素的索引。 维护队列的顺序&#xff1a; 当新元素进入窗口时&#xff0c;我们将它与队列尾部的元素进…

RSA相关学习存档

什么是RSA&#xff0c;以及RSA算法&#xff1a; https://zhuanlan.zhihu.com/p/450180396 https://blog.csdn.net/m0_51607907/article/details/123884953 https://blog.csdn.net/firechungelaile/article/details/39974379 https://blog.csdn.net/lesczx/article/details/…

【LeetCode热题100】4. 寻找两个正序数组的中位数(二分)

一.题目要求 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 二.题目难度 困难 三.输入样例 示例 1&#xff1a; 输入&#xff1a;nums1 [1,3…

子集(迭代)(leetcode 78)

核心逻辑&#xff1a; 根据子数组包含的元素个数迭代&#xff1a; 现有子集的基础上通过添加这个新元素来翻倍子集的数量 f(n)2f(n−1) vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> ans;int i,j,k;ans.p…

《科技创业月刊》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答&#xff1a;问&#xff1a;《科技创业月刊》是什么级别的刊物&#xff1f; 答&#xff1a;省级&#xff0c;主管单位&#xff1a; 湖北省科学技术厅 &#xff1b;主办单位&#xff1a;湖北省科技信息研究院 问&#xff1a;《科技创业月刊》是c刊吗&#xff1f; 答&…

spring面试八股

常用的注册bean的方式 ComponentScan扫描到的service和Controller等的注解 Configration配置类或者是xml文件的定义。 spring中有几种依赖注入的方式 1.构造器注入。 2.setter方法注入。 3.使用field属性的方式注入。 applicationContext是什么 spring bean spring aop Aop…

Linux命令-dpkg-deb命令(Debian Linux下的软件包管理工具)

说明 dpkg-deb命令 是Debian Linux下的软件包管理工具&#xff0c;它可以对软件包执行打包和解包操作以及提 供软件包信息。 语法 dpkg-deb(选项)(参数)选项 -c&#xff1a;显示软件包中的文件列表&#xff1b; -e&#xff1a;将主控信息解压&#xff1b; -f&#xff1a;把…