
深搜-我的弱项
小菜0-o
卷心菜,又卷又菜
展开
-
L2-2 病毒溯源 (25 分)
L2-2 病毒溯源 (25 分)#include<iostream>#include<cstring>#include<algorithm>#include<queue>#include<vector>using namespace std;const int N = 10010;vector<int> G[N];int f[N];vector<int>res;vector<int> s;原创 2022-03-21 12:44:43 · 235 阅读 · 0 评论 -
DFS——从当前的字典序后面一个开始。
蓝桥杯取3个字符从标准输入读入一个由字母构成的串(不大于30个字符)。从该串中取出3个不重复的字符,求所有的取法。取出的字符,要求按字母升序排列成一个串。不同的取法输出顺序可以不考虑。例如:输入:abc则输出:abc输入:abcd则输出:abcabdacdbcd输入:abcaa则输出:abc是dfs。不过加了个小要求,后面的字母的字典序比前面的字典序大。对于 1 2 3 4,取 3 个的话有1 2 31 2 41 3 42 3 4只需要后面的dfs从原创 2022-03-06 20:07:01 · 100 阅读 · 0 评论 -
公式解析——蓝桥杯
题解!!!!!!!!!!!!!!!!!#include<iostream>#include<cstring>#include<algorithm>#include<stack>#include<cmath>using namespace std;int add(int a,int b){ return a+b;}int add(int a,int b,int c){ return a+ b + c;}i..原创 2022-03-02 20:59:09 · 154 阅读 · 0 评论 -
5个砝码。
DFS#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N = 10;int a[6] = {0,1,3,9,27,81};int n;char res[50];void dfs(int x,int pos,int sum){ if(pos < 0) return; if(sum==n) { .原创 2022-02-27 16:32:03 · 227 阅读 · 0 评论 -
格子移动字母_DFS
2x3=6个方格中放入ABCDE五个字母,右下角的那个格空着。如图【1.jpg】所示。和空格子相邻的格子中的字母可以移动到空格中,比如,图中的C和E就可以移动,移动后的局面分别是:A BD E CA B CD E为了表示方便,我们把6个格子中字母配置用一个串表示出来,比如上边的两种局面分别表示为:ABDECABCDE题目的要求是:请编写程序,由用户输入若干表示局面的串,程序通过计算,输出是否能通过对初始状态经过若干次移动到达该状态。可以实现输出1,否则输出0。初始状态为:ABCDE.原创 2022-02-15 17:20:05 · 157 阅读 · 0 评论 -
试题 历届真题 排日程表【第三届】【决赛】【高职组】
试题 历届真题 排日程表【第三届】【决赛】【高职组】题解好没把握。我好难过自己一开始的思路是很有很有问题的。一开始是设置一个5*7的矩阵,每个位置穷举0 1,这样就有235 = 34,359,738,368 种可能。铁定算不出来。然后自己后来又想到状态压缩,可是还是需要穷举,自己也还是不会了归根结底在于自己想不出来好的方法穷举。怪自己 动手能力太差,生活经验缺少,联系实际的能力很差。对于a[i][j]表示i在周j上班:则a[i][j]只有两天休息,其他5天上班。所以要做的是穷举休息日原创 2022-02-15 10:35:57 · 481 阅读 · 0 评论 -
拉丁数独填数
“数独”是当下炙手可热的智力游戏。一般认为它的起源是“拉丁方块”,是大数学家欧拉于1783年发明的。如图[1.jpg]所示:6x6的小格被分为6个部分(图中用不同的颜色区分),每个部分含有6个小格(以下也称为分组)。开始的时候,某些小格中已经填写了字母(ABCDEF之一)。需要在所有剩下的小格中补填字母。全部填好后,必须满足如下约束:1. 所填字母只允许是A,B,C,D,E,F 中的某一个。2. 每行的6个小格中,所填写的字母不能重复。3. 每列的6个小格中,所填写的字母不能重复。4.原创 2022-02-14 15:16:34 · 283 阅读 · 0 评论 -
跳格子。。
小明参加了学校的趣味运动会,其中的一个项目是:跳格子。比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳相邻的格子里,但不能跳到对角的格子里。格子中写的字如下(或参看p1.jpg):从我做起振我做起振兴做起振兴中起振兴中华要求跳过的路线刚好构成“从我做起振兴中华”这句话。请你帮助小明算一算他一共有多少种可能的跳跃路线呢?答案是一个整数,请通过浏览器直接提交该数字。注意:不要提交解答过程,或其它辅助说明类的内容。DFS#include<iostream>#inc原创 2022-02-09 16:02:51 · 161 阅读 · 0 评论 -
牌型种数.
牌型种数小明被劫持到X赌城,被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?请填写该整数,不要填写任何多余的内容或说明文字。应该是废了。连暴力都不会写了#include<iostream>#include<cstring>#include<algorithm>using原创 2022-02-09 15:44:10 · 83 阅读 · 0 评论 -
搭积木_蓝桥杯真题
dfs全排列问题#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N = 10;int f[N][N];int vis[N];int res = 0;void dfs(int layer,int pos){ if(layer==0) { res++; return; }原创 2022-02-07 21:04:24 · 529 阅读 · 0 评论 -
寒假作业 2016年预赛
2016年预赛寒假作业现在小学的数学题目也不是那么好玩的。看看这个寒假作业:□ + □ = □□ - □ = □□ × □ = □□ ÷ □ = □(如果显示不出来,可以参见【图1.jpg】)每个方块代表1~13中的某一个数字,但不能重复。比如:6 + 7 = 139 - 8 = 13 * 4 = 1210 / 2 = 5以及:7 + 6 = 139 - 8 = 13 * 4 = 1210 / 2 = 5就算两种解法。(加法,乘法交换律后算不同的方案)你原创 2022-02-07 21:02:51 · 75 阅读 · 0 评论 -
P1101 单词方阵_实验室测试
P1101 单词方阵我以为好简单呢,原来好难#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N = 110;int dx[8] = {-1,-1,0,1,1,1,0,-1}; //八个方向int dy[8] = {0,1,1,1,0,-1,-1,-1};char a[N][N],str[10] = "yizhong";int vis[原创 2022-01-20 21:35:23 · 199 阅读 · 0 评论 -
285. 没有上司的舞会
285. 没有上司的舞会分析样例可知,最大是5 1 2 6 7都去。这么分析: 5可能去,可能不去。每个点分为去和不去两种情况。去,子结点都不能去不去,子节点可以去可以不去,应该取最大值。设f[i][0]表示i去,f[i][1]表示i去。则f[i][0] += max(f[i.son][0],f[i.son][1]) i.son是i所有的子节点f[i][1] += f[i.son][0] i.son是i的所有的子节点。需要先把子节点都处理好在处理根节点。所以用深搜把孩子都处理好再往上翻还原创 2022-01-17 19:37:19 · 212 阅读 · 0 评论 -
1207. 大臣的旅费-树的直径-树型dp+dfs++多看几遍啊
1207. 大臣的旅费树的直径 = 所有点的最长链+次长链的最大值优质题解树型dp某个点的最长链 = 连接该点和其子节点的边 + 子节点的最大值。很像dfs。#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N = 2e5+10;struct edge{ int v,next,w;}e[N];int cnt = 0;in原创 2022-01-17 19:26:41 · 156 阅读 · 0 评论 -
643. 动态网格 和奶牛选美一个题型-染色法Flood Fill
643. 动态网格接收字符C语言算是白学了。连续输入两个字符数据时,如果中间有空格,那应该用getchar()消除一下空格。否则会第二次字符数据会接收空格’\n’填充。char a,b; scanf("%c",&a); getchar(); scanf("%c",&b); printf("%c %c\n",a,b);这个地方居然搞了这么久。。。#include<iostream>#include<cstring>#i原创 2022-01-06 17:13:14 · 198 阅读 · 0 评论 -
2060. 奶牛选美
2060. 奶牛选美一开始的pair的vector写成了typedef vector<int,int> PII;应该是typedef pair<int,int>PII在这里表示感谢了。果然别人的一句话自己可能要象很久。dfs:染色法。用过的要标记为用过。//斗胆自己写一下#include<iostream>#include<cstring>#include<algorithm>#include<vector&g原创 2022-01-06 16:29:32 · 200 阅读 · 0 评论 -
116. 飞行员兄弟
116. 飞行员兄弟dfs写法#include<iostream>#include<cstring>#include<vector>#include<algorithm>#define x first#define y secondusing namespace std;const int N = 6;typedef pair<int,int> PII;char str[N][N];vector<PII> res原创 2021-12-25 11:30:41 · 328 阅读 · 0 评论 -
95. 费解的开关
95. 费解的开关好难。确实费解最暴力方法:每个格子有开和关两种操作,最暴力的方法就是对每个格子进行这两种操作,所以最后的时间复杂度是225 = 三千多万,每个开关有长度为5的for循环修改自己和上下左右四个方向,所以一共是一亿两千多万,会超时。由题意可知:顺序可以任意。即先按那个格子,最后都可以得到全为亮的结果。每个格子最多只按一次。设第i行已经确定,则要更改i+1行,只能通过修改i+2行更改i+1行的0第i行已经确定,此时要修改第i+1行的0:如果直接更改i+1行,则势必会影响原创 2021-12-23 14:20:58 · 579 阅读 · 0 评论 -
92. 递归实现指数型枚举
92. 递归实现指数型枚举全排列首先回忆一下全排列。在不同的位置放1~n的数字。需要用到回溯,因为后面的位置还可能写前面的数字。pos是不同的位置,当到n+1的时候说明前面n个位置的数字都已经放好了。所以输出。#include <iostream>using namespace std;const int N = 1e3;int n;int vis[N];int a[N];void dfs(int pos){ if(pos == n+1) {原创 2021-12-23 09:07:08 · 761 阅读 · 0 评论 -
1209. 带分数
1209. 带分数很牛的一个题啊,是蓝桥杯的真题,我看是倒数第二个编程题。这个思路,会了不难,难了不会。对1~9做全排列,然后枚举 + 和 / 的位置。有点小难。#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N = 10;int a[N];int vis[N];int res[362888][N];int cnt = 0;i原创 2021-12-22 20:05:36 · 448 阅读 · 0 评论 -
93. 递归实现组合型枚举
93. 递归实现组合型枚举剪枝的操作puts("");表示换行设置一个开始的位置,下次只能从这次开始,避免了123 132 213 231 312 321这样的算作多个的重复。#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N = 16;int n,m;int a[N];void dfs(int pos,int start)原创 2021-12-22 20:02:41 · 322 阅读 · 0 评论 -
YTU3148: 搜索基础之迷宫问题栈 自己的弱点多看两眼
3148: 搜索基础之迷宫问题从起点开始遍历,上下左右四个方向,如果找到了能走的方向,从这个方向再往下走,没找到说明走到这个点走到了一个死胡同,这个点需要回退。按上面的算法,保存在栈中的就是所有路径。因为有上下左右四个方向,如果找到一个,就不要再继续找这个点的其他方向了,而是将这个新找到的点入栈,再从这个点出发去DFS其他点。每找到一个点,需要设置这个点不能走了,可以将这个点设置为墙。因为这个点走也是死胡同,所以把这个点设置为墙下次再走的时候就不要走了,如果将这个点在重新设置为0 (可以走),就会死原创 2021-12-19 18:07:12 · 224 阅读 · 0 评论 -
3302. 表达式求值-栈的应用
3302. 表达式求值解析#include<iostream>#include<cstring>#include<algorithm>#include<stack>#include<unordered_map>using namespace std;unordered_map<char,int> h = {{'+',1},{'-',1},{'*',2},{'/',2}};stack<int> num;st原创 2021-12-19 15:00:33 · 72 阅读 · 0 评论 -
括号匹配_栈入门
P1739 表达式括号匹配添加链接描述关于栈的入门题放到DFS里把,感觉比较像设置一个栈,将左右括号放进去。扫描到左括号 入栈扫描到右括号 : 当前栈顶为左括号,立即出栈。栈空或栈顶不为左括号,则不匹配扫描完后,可能出现左括号多于右括号,判断是否栈空,栈空说明没有多余左括号 反之则不匹配。#include<iostream>#include<cstring>#include<algorithm>#include<stack>using n原创 2021-12-19 10:55:06 · 106 阅读 · 0 评论 -
城堡问题.
//不要一上来就唯唯诺诺,你怎么知道自己不行?#include<stdio.h>#include<string.h>int n,m,ans=0,max=0,count;int map[51][51];void dfs(int x,int y){ int tem=map[x][y]; if(map[x][y]<0||y<=0||x<=0||x>n||y>m)return; else count++,map[x][y]=-1; if((原创 2021-04-29 16:45:14 · 87 阅读 · 0 评论 -
控制公司YTU
#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N = 102;int n,vis[N][N],a[N][N];//a[i][j]<=50的才需要dfs//如果a[i][j]大于50了,i一定控制j公司。//不大于50,才有可能控制该公司。void dfs(int x,int y){ if(vis[x][y]) ..原创 2021-09-26 15:55:04 · 130 阅读 · 0 评论 -
3472. 八皇后
思路:1.DFS求所有结果,将结果保存起来。int->string: to_string(int)。字符串可以直接加起来:string temp;for(int i=1;i<=8;i++) temp+=to_string(a[i]);2.DFS就是八皇后的DFS。#include<iostream>#include<cstring>#include<algorithm>using namespace std;int a[10];..原创 2021-11-18 13:54:44 · 216 阅读 · 0 评论 -
八皇后模板
也算是DFS模板吧。如何用深搜求出所有的八皇后的所有位置1.按行或者列展开,逐层展开,前面的表示已经安放好,后面的还没安放2.a[j]表示第i行的皇后所在列。【x,i】表示待安放的点,【j,a【j】】表示已经放好的皇后的点。由于是按行展开的,所以行一定没有重复,只需要判断后面要放的和前面已经放好的有没有在一列或者在同一斜对角线上即可。3.在2中已经说的很清楚了,安放当前的需要判断和前面已经放好的有没有冲突,当前在放第x个,1~x-1都已经放好了, x~后面的都没有放好。#include<i原创 2021-11-18 14:09:22 · 147 阅读 · 0 评论