
搜索
会飞的蟋蟀
学习中!!
展开
-
luogu P1019 单词接龙
解析一道dfs题,但是坑在题意不清,实际是求最短重叠词段,我一开始求成了最长的(直接增大了难度…)。 主要就是两个部分,dfs和concate,dfs遍历构造出来的搜索树,concate计算重叠长。 tips: 为什么这是道搜索题?答:以一个词开始(根节点),依次考虑数组中的词能否连接(分支),算最长词长。 代码修改了一下,比较简练了#include <iostr...原创 2018-03-26 14:12:40 · 251 阅读 · 0 评论 -
USACO 2.4.2 穿越栅栏 Overfencing
题解此题不难,但是很恶心。迷宫的图数据太繁琐了,比较考验细心。 做法就是单纯的BFS,判断后加步数就好。但是要走两次,然后每处取最小,最后判断即可。Code#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <q...原创 2018-08-31 21:01:54 · 591 阅读 · 0 评论 -
LeetCode 279. Perfect Squares
题解很多解法,包括不限于dfs,dp,甚至数学解法(最快)。给出dp解法dp [ i ] : 代表对 i 拥有的最少平方和数量。易得dp[ i ] = min{ dp[ i - k*k ] | k= 1,2,3… && k*k <= i }Codeclass Solution {public: int dp[10000]={0}; i...原创 2018-10-01 13:51:31 · 114 阅读 · 0 评论 -
LeetCode 207. Course Schedule
题解这题就是拓扑排序,也可以dfs查环,思路简单,注意下如何用数据结构表示。可参考的英文题解含DFS/BFSCodeclass Solution {public: bool canFinish(int n, vector<pair<int, int>>& pres) { vector<unordered_set<int...原创 2018-10-02 15:26:15 · 165 阅读 · 0 评论 -
LeetCode 215. Kth Largest Element in an Array
题解比较经典的题了,当然经典也意味着解决方案很成熟了。快排变体,堆排,插入选择都可以做。Codeclass Solution {public: int findKthLargest(vector<int>& nums, int k) { /* heap sort priority_queue<int&g...原创 2018-10-05 09:57:22 · 193 阅读 · 0 评论 -
LeetCode 236. Lowest Common Ancestor of a Binary Tree
题解求解最近公共父节点,比较经典的题目。思路是二路dfs。沿着左右下行,终结条件是 空节点 或者 root==(p or q)。那么此时,Left Right 有三种情况均非空:左右两子树刚好各有一个目标节点,此时root就是父节点。一空一非空:空端子树没有目标节点,非空一端子树为父节点。双空:舍弃。为什么这样可行,因为递归作用下,但凡返回的是非空那么该子树必然至少含有一个目标节...原创 2018-10-05 10:47:55 · 112 阅读 · 0 评论 -
LeetCode 576. Out of Boundary Paths
题解这道题我觉得难在内容理解,怎么程序表述出这样的一个目的。一开始我想了个bfs的,我想是从起点算移动到某位置时还剩下多少步数,如果剩余步数大于0而该位置在边界上那么该位置+1,最后遍历四周边界位置累加其数字即可。思路正确但是爆内存(剪枝一样爆),而且有点不是很透彻的感觉。看了下dp的题解,觉得舒服多了。三维dp[ i, j , k]:代表从i-j开始走k步能走出界的方法数。这个描述...原创 2018-10-18 15:53:30 · 148 阅读 · 0 评论 -
LeetCode 842. Split Array into Fibonacci Sequence
题解比较单纯的深搜,有些坑比如数字溢出。比较一下后两份代码,性能差距明显。Codebool backtrack(string &S, int start, vector<int> &nums){ int n = S.size(); // If we reached end of string & we have mor...原创 2018-10-22 11:02:34 · 376 阅读 · 0 评论 -
LeetCode 675. Cut Off Trees for Golf Event
题解排序+BFS最短路。思路比较直接吧,按树高顺序依次求之间的最短路径。注意这次BFS的写法不太一样,不用开等大小矩阵存最短长度。Codeint dx[4]={0,1,0,-1};int dy[4]={1,0,-1,0};int cutOffTree(vector<vector<int>>& forest) { if(forest.e...原创 2018-10-27 10:21:46 · 173 阅读 · 0 评论 -
LeetCode 787. Cheapest Flights Within K Stops
题解这题看似最短路径,但是暗藏变化。首先想到dfs,搜索到所有由始至终的可行路径,记录最小cost即可。但是这题编程实现有很多小花招,怎么剪枝,一个是k(步进的次数),二是cost,都可以用来减小搜索空间。再者,就是贝尔福特算法,非常适合这题,因为此题有个k的限制。当然应用的时候需要修改一点,原本是重复|V|-1次的,此时只要k+1次了。值得注意的是,在每一轮更新dis[]数组的时候...原创 2018-11-03 13:01:27 · 304 阅读 · 0 评论 -
LeetCode 47. Permutations II
题解算所有的排列,有重复数也差不多,都是用递归法。大概递归思路:顺序对每个位置,交换当前位置到此后的某位置,进入下一递归,当前位置加一。Codevoid per(vector<int> a, int i, int j, vector<vector<int>> &res){ // 注意这个 a 不是传引用 if(i...原创 2018-11-02 10:59:55 · 133 阅读 · 0 评论 -
USACO 2.3.4 Controlling Companies
题解数据弱暴力搜索搞定。也可以用并查集和图论算法搞定。Code// head files excludedusing namespace std;int n,m,k;int f[101][101];bool vis[101];bool ctr[101];int ct[101];void dfs(int x){ if(vis[x]) return; v...原创 2018-08-31 12:05:43 · 126 阅读 · 0 评论 -
P1118 [USACO06FEB]数字三角形 Backward Digit Su
题解可以递推出初始的系数组,然后遍历所有的排列并计算就可以了。 用stl会超时,需要优化。我们在计算累乘的过程中 若发现此位置算上后 cur_sum已经大于目标sum时 那么在对后面的数做permutation就无用了 全部都会大于sum,所以可以直接跳过。 跳的方式是 把第i位到末尾的数全部从大到小排序,那么下次permutaion就会改变当前i位。 这是根据permutaion的计...原创 2018-08-08 13:34:41 · 154 阅读 · 0 评论 -
luogu P1605 迷宫
解析一道dfs题,入门级的深度搜索,很简单。注意原地打码即可。代码#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>using namespace std;typedef pair<int,int> P;int...原创 2018-03-27 21:59:26 · 245 阅读 · 0 评论 -
luogo P1219 八皇后
解析八皇后问题是非常经典的搜索问题。大体思路是依据每行考虑可行列来dfs,但是随着N(行数)增大, 递归的次数会膨胀。所以需要一种合适的精简快捷的判断可行列的方法,这里采用标记数组的方法: 选用3个数组(用check[3]表示),check[0]标记垂直方向,check[1]标记/左下斜方向,check[2]标记 \右下斜方向。 tips: 为什么 i+j ,i-j+n 可以表示斜标记呢...原创 2018-03-28 21:43:55 · 803 阅读 · 0 评论 -
USACO 1.4.5 Wormholes
题解目前为止最难的题,有多种做法,这里给出一个比较好理解的方法—配对法 大体思路是深度递归创造所有的配对b[],然后对每个配对检验是否有回路。代码/*PROG:wormholeID:imking022LANG:C++ */#include <iostream>#include <cstdio>#include <fstream>...原创 2018-04-06 17:03:29 · 382 阅读 · 0 评论 -
USACO 1.5.2 Mother's Milk 母亲的牛奶
题解直观的想法是枚举出所有可行三元数组,那么用dfs深度遍历就可以了。 但是要注意怎样去重,这里用一个visit[][]二维数组表示AB两桶的奶量 (因为总量一定所以二维就够了)是否出现过。 当然还有很多方法,比如可以当成奥数题算出来…代码/*PROG:milk3ID:imking022LANG:C++ */#include <iostream>#in...原创 2018-04-23 19:31:37 · 238 阅读 · 0 评论 -
USACO 1.6.3 Superprime Rib 特殊的质数肋骨
题解这题就比较简单了,就是个深度搜索。注意到每次构成都是素数,显然可以剪枝。 数据很小,非常简单。代码/*PROG:sprimeID:imking022LANG:C++ */#include <iostream>#include <cstdio>#include <fstream>#include <cstring>...原创 2018-05-15 16:10:57 · 295 阅读 · 0 评论 -
luogu P1141 01迷宫
题解这道题有点特点,看似是bfs 其实真这么做 最后会LTE。 关键在于发现 同一联通块内的点 其可到达的点数是一样的 然后这就变成了求联通块并计数的题目了。代码#include <iostream>#include <cstdio>#include <fstream>#include <cstring>#includ...原创 2018-06-05 16:59:09 · 173 阅读 · 0 评论 -
USACO 2.1.1 城堡 The Castle
题解比较有意思的一道题目。大体概念是图搜索和洪水填充。 前两个问题用dfs就可以解决,后两问遍历对所有房间,检验N和E墙即可。 思路很清楚,但写起来还是要仔细。代码/*PROG:castleID:imking022LANG:C++ */#include <iostream>#include <cstdio>#include <fs...原创 2018-07-23 14:10:59 · 654 阅读 · 0 评论 -
USACO 2.1.4 健康的荷斯坦奶牛 Healthy Holsteins
题解这道题我一直想着用dp来解,因为我觉得和01背包很像。 但是这个容量数据没办法用数组表示,所以一直想不到解法。 我默认dfs是会指数爆炸的不好解法,所以一开始就没考虑,但这题的数据很弱…代码#include <iostream>#include <cstdio>#include <fstream>#include <cstdl...原创 2018-08-06 11:20:22 · 471 阅读 · 0 评论 -
USACO 2.1.5 海明码 Hamming Codes
题解这道题比较简单,就是暴力遍历,一个个试就可以了。 海明距离就是简单的位运算 异或一下就出来了。 代码也比较清晰了不解释。代码#include <iostream>#include <cstdio>#include <fstream>#include <cstring>#include <cstdlib>#...原创 2018-08-06 14:39:01 · 355 阅读 · 0 评论 -
P1434 [SHOI2002]滑雪
题解比较简单的记忆化搜索,存储在此位置的最长距离,便于其他位置计算。Code#include <iostream>#include <cstdio>#include <fstream>#include <cstring>#include <cstdlib>#include <cmath>#inclu...原创 2018-08-08 11:58:30 · 333 阅读 · 0 评论 -
LeetCode 572. Subtree of Another Tree
题解题很简单但要写得简洁优雅也不容易。给出的代码递归写得非常漂亮。Codebool isSubtree(TreeNode* s, TreeNode* t) { if(!s) return false; if(isSame(s,t)) return true; // 点睛之笔 return isSubtree(s->le...原创 2018-11-02 11:35:35 · 359 阅读 · 0 评论