搜索
Dream-chasing ant
鄙人水平不高,建立博客初心只是想留一份回忆给自己。
展开
-
尺取法
文章目录Subsequence一般用于求取有一定限制的区间个数或最短的区间使用尺取法时应清楚以下四点:1、 什么情况下能使用尺取法? 2、何时推进区间的端点? 3、如何推进区间的端点? 4、何时结束区间的枚举?尺取法通常适用于选取区间有一定规律,或者说所选取的区间有一定的变化趋势的情况,通俗地说,在对所选取区间进行判断之后,我们可以明确如何进一步有方向地推进区间端点以求解满足条件的区间...原创 2020-03-12 18:24:40 · 58 阅读 · 0 评论 -
P1101 单词方阵
传送门这道题可以用dfs回溯来做,难点是沿着同一方向摆放。所以我想的是,如果是’y’那么就沿着四面八方搜索,确定方向,然后每一次就按照这个固定的方向。#include<bits/stdc++.h>using namespace std;const int maxn=1e2+10;char a[maxn][maxn],s[10]={'0','y','i','z','h',...原创 2020-03-25 15:35:04 · 48 阅读 · 0 评论 -
P1162 填涂颜色
传送门这道题我们观察可以看到,判断是否闭合,我们可以充分利用四个边的0。#include<bits/stdc++.h>using namespace std;const int maxn=35;int n,a[maxn][maxn];int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};void dfs(int x,int y){ for(in...原创 2020-03-25 14:29:09 · 77 阅读 · 0 评论 -
P1596 [USACO10OCT]Lake Counting S
一道DFS判断连通块的题目传送门#include<bits/stdc++.h>using namespace std;const int maxn=1e2+10;char c;int n,m,a[maxn][maxn],cnt;bool ok[maxn][maxn];int dx[8]={0,1,1,1,0,-1,-1,-1},dy[8]={1,1,0,-1,-1,...原创 2020-03-25 09:53:27 · 130 阅读 · 0 评论 -
P2404 自然数的拆分问题
传送门回溯题#include<bits/stdc++.h>using namespace std;const int maxn=10;int n,a[maxn];void print(int k){ for(int i=1;i<=k;i++) { if(i!=k) printf("%d+",a[i]); else printf("%d\n",a[i...原创 2020-03-25 09:39:46 · 146 阅读 · 0 评论 -
P1605 迷宫
传送门回溯,首先对起点标记#include<bits/stdc++.h>using namespace std;const int maxn=10;int n,m,t;int p1,p2,q1,q2,a[maxn][maxn],cnt,f[maxn][maxn];int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};void dfs(int x...原创 2020-03-24 23:03:55 · 62 阅读 · 0 评论 -
P3395 路障
传送门这题的难点是放置路障#include<bits/stdc++.h>using namespace std;const int maxn=2e3+10;int t,n;bool ok;int a[maxn][maxn],f[maxn][maxn];int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};int fx[maxn],fy[max...原创 2020-03-24 19:07:42 · 244 阅读 · 0 评论 -
P1332 血色先锋队
传送门这题跟上一次做的题有点类似,我的求法是每输入一个感染源就重新一遍,更新大小。#include<bits/stdc++.h>using namespace std;const int maxn=5e2+10;const int maxn1=0x3f3f3f3f;int n,m,s[maxn][maxn],a,b;struct node{ int x,y,k;}...原创 2020-03-24 16:43:26 · 114 阅读 · 0 评论 -
P2895 [USACO08FEB]Meteor Shower S
传送门这道题也是bfs、dfs都可以做的题,我先用dfs做的。首先要注意几个点,流星可能在不同的时间砸向同一个点,所以要取最小值。周围的区域(tx,ty)也是同理,只不过代码我标记注意的地方需要注意,min是与t相比,而不是流星砸向的那个点(x,y),因为那个点(x,y)当前的值不是t的值而是以前当周围区域(tx,ty)的值.有可能会有不能完成的情况输出-1。0到300是流星可能的砸向的...原创 2020-03-24 16:07:36 · 320 阅读 · 0 评论 -
P1706 全排列问题
传送门这道题当然可以用STL来做,但这道题其实是回溯,在八皇后那篇文章文章里我讲的应该是很详细了,所以这道题一遍过了。比如说n=3时,当在第一层时,我们把1给标记了,然后进入到第二层循环,i=1时标记了,所以第二层先标记2,然后进入下一层递归。到了第三层1、2都被标记了,所以只能选择3,然后递归打印,然后解除标记3.返回第二层的递归,第二层的i可以等于3,在以此类推。#include<...原创 2020-03-24 14:59:41 · 85 阅读 · 0 评论 -
P1219 [USACO1.5]八皇后 Checker Challenge
传送门讲解非常详细的视频回溯的意义是找到所有可能的解,而不是一个解其实一经过分析,也没有想象中的那么难。1.这道题我们是要考虑放置皇后的位置,我们要兼顾到横坐标、也要兼顾到纵坐标。可我们根据观察横坐标、纵坐标都有一个从1到n递增的顺序。我们可以把横坐标按照从1到n的顺序,这样不会重复,而我们只需要管纵坐标即可,这样会大大减小难度。2.如果说我们横坐标1到n找,那么肯定不会重复。我们看纵...原创 2020-03-23 11:28:27 · 204 阅读 · 0 评论 -
P1135 奇怪的电梯
传送门文章目录dfsbfsdfs这道题一种做法是dfs,如果dfs超时的话,那就要使劲想办法剪枝,还有回溯一定要搞清楚。两篇回溯参考自己抽空精读一下#include<bits/stdc++.h>using namespace std;const int maxn=2e2+10;const int maxn1=0x3f3f3f3f;int n,a,b,cnt=maxn...原创 2020-03-22 23:52:16 · 86 阅读 · 0 评论 -
P1036 选数
传送门这道题用bfs,难点是去重#include<bits/stdc++.h>using namespace std;const int maxn=25;int n,k,a[maxn],sum;bool isprime(int x){ for(int i=2;i*i<=x;i++){ if(x%i==0) return false; } return t...原创 2020-03-22 17:06:49 · 52 阅读 · 0 评论 -
P1443 马的遍历
传送门这道题是bfs,当初入队时刷的题。虽然有些遗忘,但现在比以前真的强了不少。#include<bits/stdc++.h>using namespace std;const int maxn=4e2+10;int n,m,s[maxn][maxn];bool ok[maxn][maxn];struct node{ int x,y;}Top;int dx[8]...原创 2020-03-22 16:15:43 · 72 阅读 · 0 评论 -
P2036 Perket
传送门这道题由于n的数据过小,所以可以直接暴力,不过这道题的正解是dfs#include<bits/stdc++.h>using namespace std;const int maxn=15;struct node{ int x,y;}s[maxn];int n,sum=0x3f3f3f3f;void dfs(int i,int x,int y){ if(i=...原创 2020-03-22 14:56:23 · 223 阅读 · 0 评论