![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索
qq_43674811
这个作者很懒,什么都没留下…
展开
-
dfs终极总结
写在前面我们常使用的不带返回值的dfs,void dfs(…),一般是从起点搜索到终点,就像走迷宫一样,从本状态列出下一步可走的状态,然后dfs下一步可走的状态,一直达到终点。这类dfs属于递推(从小(边界条件)往大搜索),比如二叉树的先根序序遍历(void preorder),先遍历根结点,再往左子树,右子树递推着遍历。但是有时候,我们发现将大问题分解为小问题直至问题边界更利于代码的书写,这类就属于递归,比如求斐波那契数列,f[n]=f[n-1]+f[n-2],求f[n]的问题就被转换为求f[n-1]原创 2021-04-05 18:59:04 · 480 阅读 · 0 评论 -
超级源点与超级汇点
参考:https://blog.csdn.net/weixin_43627118/article/details/100134565超级源点如果路径权值相同可以使用多源BFS,开始时将多个起点直接放入队列中。路径权值不同则使用Dijkstra,或者SPFA。多源BFS见:https://www.acwing.com/activity/content/problem/content/3511/1/AC代码:#include<bits/stdc++.h>#define row firs原创 2021-08-05 19:33:37 · 63 阅读 · 0 评论 -
蓝桥杯寒假作业(全排列模板)
题目题解注意整除要加上条件 a%b==0记住该模板#include<bits/stdc++.h>using namespace std;int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13};//0~12int ans=0;bool check(){ if(a[0]+a[1]==a[2]&& a[3]-a[4]==a[5]&& a[6]*a[7]==a[8]&&原创 2021-04-14 08:49:43 · 218 阅读 · 0 评论 -
蓝桥杯 四平方和 数的分解(简单dfs,算法时间复杂度优化)
题目程序输入为一个正整数N (N<5000000)要求输出4个非负整数,按从小到大排序,中间用空格分开例如,输入:5则程序应该输出:0 0 1 2再例如,输入:12则程序应该输出:0 2 2 2再例如,输入:773535则程序应该输出:1 1 267 838资源约定:峰值内存消耗 < 256MCPU消耗 < 3000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意原创 2021-04-13 11:06:22 · 396 阅读 · 0 评论 -
蓝桥杯剪邮票(状态编码,非迷宫式dfs,必看)
文章转载自传送门#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=10000;int hash[maxn];int vis[3][4];int tol;int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};void dfs(int cnt){ if(cnt==5){ int tmp=0; f原创 2021-04-13 02:10:19 · 68 阅读 · 0 评论 -
方格填数(递推dfs,状态编码)
题目如下的10个格子填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少种可能的填数方案?题解本题其实并不需要状态编码,因为从1行2列开始填和从1行3列开始填,所得到的状态是不一样的,不像 蓝桥杯的7段码 中状态会有重叠。写到一半才注意到,但是可以练练状态编码。状态编码:这里使用映射:map<pair<int,int>,int> mp,如1行1列映射为数字0,1行2列映射为数字1,1行3列映射为数字2,假如1行2列里填的数为0,1行原创 2021-04-11 12:39:24 · 98 阅读 · 0 评论 -
蓝桥杯小朋友崇拜圈(递推,dfs找环,优化)
题目测试数据1:93 4 2 5 3 8 4 6 9测试数据2:3022 28 16 6 27 21 30 1 29 10 9 14 24 11 7 2 8 5 26 4 12 3 25 18 20 19 23 17 13 15代码#include<bits/stdc++.h> using namespace std;int par[100010];int dep[100010];//即可存储深度,也可表示是否被访问过 int re[100010];// re[num]原创 2021-04-08 23:07:00 · 206 阅读 · 0 评论 -
蓝桥杯作物杂交(递归,记忆化dfs)
题目传送门解析递归思路:要在最短时间得到T类型种子,就要在最短时间内得到它中间类型的种子。#include<bits/stdc++.h>#define INF 0x3f3f3f3fusing namespace std;const int maxn=2005;int N,M,K,T;int my_time[maxn];typedef struct cross//a,b杂交经历时间time { int a; int b; int time;}Cross;vecto原创 2021-04-05 19:07:52 · 556 阅读 · 4 评论 -
蓝桥杯七段码简约版(递推dfs,状态编码)
题目解析将a,b,c,d,e,f,g用1-7编码,作出它们的邻接矩阵对a,b,c,d,e,f,g进行dfs(对a的dfs所得的状态一定包含a,如a,ab,af,abc…,同理对b的dfs得到的状态一定包含b,如b,ba,…,以此类推),明显对a的dfs得到的ab和对b的dfs得到的ba两个状态是重合的,所以要设定一个针对状态的vis数组,如果该状态被访问过,就不重复计数。要使用 状态的vis数组 就要提前对状态编码编码原则:0灭1亮 ,状态对应的二进制编码范围0000000~01111111,最原创 2021-03-27 23:10:31 · 167 阅读 · 0 评论