dfs
Forward in time
永不停止前进
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Lead of Wisdom(dfs)
这道题其实一开始以为是个多重背包dp来着,但是后面我又想了dfs,但是一看时间复杂度50^50。我就以为是个dp。这个就是被时间复杂给误导了方向,题后才知道我之前的分析不对,因为有n个,k种,那么平均每种为n/k个;那么dfs的时间复杂度就是k的(n/k)次方,那么就是求这个函数的最值。 取一个对数+求导就可以求出来最值了,当k==e的时候就是最值,这时候大概在1e8时间复杂度。然后题目给了8秒,完全够了。主要注意的是如何把断续的种类给弄成连续的,这里可以用一个book数组来解决; AC代码: #incl.原创 2020-07-26 10:47:02 · 252 阅读 · 0 评论 -
A - Sudoku POJ - 2676(dfs)
题意:给99的格子,并且分为三个33的小块,每个小块里面必须有1–9数字,并且每行每列也必须有1–9数字,并且不得重复; 现在给出了99中的一些格子已经被填充了; 思路:这道题肯定是dfs枚举所有可能; 首先搞明白这个问题: 对于一个Map[10][10]的宫格,那么i/3和j/3和第几块k有什么关系: 可以发现3(i/3)+j/3就是等于第k个格子; 所以找到了能标记块里面的标记数字了; 所...原创 2020-03-04 14:31:21 · 142 阅读 · 0 评论 -
P1092 虫食算(dfs+剪枝)
这道题多半一想就是dfs,但是有26总字母,所以如果按照先赋值完每个字母之后再去判断是否和答案相等,那么时间复杂度就是o(n!)了,早就超时了;所以这个题需要剪枝,但是这个题我感觉dfs过也都是巧合。。。。。。。。 为什么?因为按照枚举dfs赋值也有可能TLE,所以这道题dfs应该不是正解。但是dfs如果运气好也能刚好过; 我用的数组来映射+一个进位判断+字符串转化为数字的技巧AC的; 我用的...原创 2020-01-31 21:56:07 · 278 阅读 · 0 评论 -
P1605 迷宫(基础dfs)
数据规模很小,所以直接dfs求方案总数即可;dfs中的参数为判断当前走的坐标; 唯一需要注意的就是坐标规定; 通常坐标都是: AC代码: #include<bits/stdc++.h> using namespace std; int n,m,T;//n*m T个阻碍物 int sx,sy,fx,fy;//起点,终点坐标 int Map[10][10]; int ans; in...原创 2020-01-31 21:50:27 · 249 阅读 · 0 评论 -
P1101 单词方阵(枚举+一个方向的dfs)
题意:在8个方向上,如果存在一个读的顺序使得这个方向上读的连续字符的顺序为yizhong,那么这个方向所对应字符串就不用*替代; 但是注意两点1.存在字符共用。2.只能在一个方向存在联系的yizhong,不能拐弯; 因为这道题数据很小,所以直接两个for+一个dfs就AC了; AC代码: #include<bits/stdc++.h> using namespace std; cha...原创 2020-01-31 21:46:37 · 230 阅读 · 0 评论 -
P1019 单词接龙(dfs+简单的字符串处理)
题意: 1.给出n个单词,然后根据题上的规则保证给出的每个单词在“龙"中最多出现2次; 2.每个相邻连接的单词不能存在包含关系(但是我说实话eye这个单词你说最大长度是多少?答案居然给的5。。。。eye不是eye的子集吗?怎么这也不算包含,搞得我judge算长度算错了); 3.按照最后给出的单个字符的单词作为龙头. 问连接出来的最长的字符串长度是多少? 很明显这道题直接dfs一下就OK了,有个难...原创 2020-01-31 21:39:11 · 456 阅读 · 0 评论 -
P1219 八皇后(dfs+思维)
题意:有nn的格子,然后在一个点的8个方向中的其中任意一个方向上的延长线上最多只能有1个皇后(意思就是可以有0个或者1个) 图理解: 比如题上的66的格子; 那么有: 就是这8个方向;每一种颜色线上最多出现一个皇后,问一共有多少种放皇后的不同方案(指方案所形成的图形不会完全一样); 现在题意清楚了; 那么这个题有个难点在于怎么判断这个点是否能够走(8个方向上是否已经存在1个皇后了)?又应该怎...原创 2020-01-31 21:26:24 · 237 阅读 · 0 评论 -
P1086 花生采摘(搜索dfs)
这道题我开头没看见题目上说每个点种的花生数目不一样,所以考虑的dfs,写完发现题目所花生数目不一样。。。。。。。。可以直接sort即可就完事儿的; 不过dfs有可能会卡到o(n!)去,但这道题没有卡住; 题意:每次去找最大的花生数目去摘,注意每次走一格和摘是2个单位时间,所以注意时间即可; dfs思路:把所有MAX找出来,然后搜索所有情况,每次dfs进来说明这个点是可以到的并且能够有剩余时间回去...原创 2020-01-14 19:51:11 · 282 阅读 · 0 评论 -
对称的二叉树(dfs)
首先明白什么是二叉树: 我感觉百度解释最好: 其实我自己的理解就是二叉树就除了子叶节点外,其他节点只有左孩子和右孩子;(树是一个连通没有回路的无向图) 注意这里连通指的是任意两点之间可达; 然后题目上说来判断一颗二叉树是不是轴对称的也就是这个意思: 颜色相同表示对称;那么我的整体思路就是去判断左半边是不是右半边的镜像(也就是对称); 那么这个就需要递归来搞定,把他分为左半边和右半边来判断;这...原创 2019-08-26 12:49:48 · 319 阅读 · 0 评论 -
Lake Counting(纯dfs(无路径记录))
这道题很纯粹的dfs;题意:就是求有多少个水洼,一个水洼根据常识都应该知道是四面换地的;所以每次dfs改一遍能连通的w;改变次数就是ans了; #include<iostream> #include<cstdio> using namespace std; int n,m; char maze[200][200]; int book[200][200]; int dir[...原创 2019-08-16 16:01:20 · 150 阅读 · 0 评论 -
P1008 三连击(dfs)
这道题我记得好像啊哈算法上面讲过dfs;哎呀反正不管了;重新写一遍也是好的; 我利用的向量来存的数字;以个数为结束条件来的dfs;为什么呢? dfs思路:比如: 1 2 3 这三个数,他的全排列有哪些? 1 2 3 ,1 3 2 , 2 1 3 ,2 3 1, 3 1 2, 3 2 1;就这几种,其实就是利用dfs的思想排出来的; 因为当你标记1已经放到第一个位置时,那么第二个你就标记2放入第...原创 2019-08-25 21:03:00 · 207 阅读 · 0 评论 -
Divide Groups(二分图+dfs+连通块+邻接表)
题意:给你i认识j但是不具有对称性,也就是j不认识i;然后问是否能分为两组,两组中都是认识的人; 我头一次写二分图,最原始的二分图是是否相邻的能被两种不同的颜色染色;然后这道题可以这样抽象: 把不同的人当做顶点,如果两个人不认识就加边: 比如1不认识2,2不认识3,那么: 很明显这个图是二分图;因为1号顶点可被染成1的颜色,2号顶点可以被染成-1的颜色,3号顶点可以被染成1颜色;所以这道题就...原创 2019-08-18 16:13:33 · 407 阅读 · 0 评论 -
乘积最大(dfs+思维)
这道题以前我也遇见过,但是没搞明白,现在搞明白了: 这道题我当时一读题就想用dfs,但是有个问题就是我怎么把n-1个空位插k个乘号进去,并且最终判断最大值,因为dfs是要对每个位置都要枚举,并且前面的位置要占满;所以我就一直在想这个问题,结果没想出来,之后百度了一下,看了其他人的dfs,我感觉,那些人是真的大佬,我好菜。最后我还是看明白了,代码中count表示填的乘号的个数,res表示上几次段...原创 2019-08-08 17:38:22 · 1897 阅读 · 3 评论
分享