搜索
文章平均质量分 70
Masamiiiii
这个作者很懒,什么都没留下…
展开
-
Atcoder AGC B Splatter Painting 记忆化+逆向模拟
点击打开链接题意:n点,m边,q个操作 vi,di,ci 每次将与v距离d以内的点涂成c,问q次操作后n个定点颜色?n,m,q//逆向考虑,从编号大的操作开始,每个点u最终颜色由最后一次对u上色的操作决定 if(!a[u]) a[u]=c,记忆化操作fun(u,d),如果fun(u,d)被执行,编号小的fun(u,d)就不用再执行了, fun(u,d)=fun(v,d-1)(v是u原创 2017-04-02 10:13:13 · 632 阅读 · 0 评论 -
POJ 3276 反转(开关问题)
点击打开链接#include #include #include using namespace std;const int M =5100;int dir[M];// dir[i] 0:F 1;Bint n; int f[M]; // f[i] i~i+k-1的区间是否被翻转过 int calc(int k) //判断第i只cow的State 只要判断 j=i-k+1~原创 2016-08-06 22:22:02 · 434 阅读 · 0 评论 -
hdu 1175 连连看dfs(记录转弯次数)
点击打开链接#include #include #include using namespace std;const int M =1100;typedef struct{ int x; int y;}Move;Move movE[4]={{-1,0},{1,0},{0,-1},{0,1}};int g[M][M],n,m,flag,visit[M][M];原创 2016-07-21 14:57:57 · 335 阅读 · 0 评论 -
poj 1054 技巧枚举
#include #include #include using namespace std;const int M = 5100;struct Node{ int x; int y;}node[M];int n,r,c,ans=2;bool operator <(const Node &a,const Node &b){ if(a.x==b.x) return a.y<原创 2016-06-18 23:14:05 · 293 阅读 · 0 评论 -
hdu 2611 dfs+经典判重cut
#include #include #include const int M = 1100; using namespace std;struct Node{ int num; int pos;}num[M];int n,p,res[M],len;bool flag=false;bool cmp(Node a,Node b){ if(a.num==b.num) {原创 2016-06-17 23:33:42 · 380 阅读 · 0 评论 -
hdu 2610 dfs+判重剪枝
点击打开链接#include #include #include const int M = 1100; using namespace std;struct Node{ int num; int pos;}res[M];int num[M],n,p,Count=0;bool flag=false;bool check(int x,int y){ for(int i原创 2016-06-16 21:48:36 · 358 阅读 · 0 评论 -
hdu 1198 dfs水(连通性)
点击打开链接#include #include #include #include using namespace std;const int M =60;int g[M][M];// g[i][j] 中存的是PIPE的种类 typedef struct{ int x; int y;}move1;move1 Move[4]={{-1,0},{1,0},{0,-1},{0,原创 2016-07-22 20:45:46 · 279 阅读 · 0 评论 -
hdu 1258 Sum it up dfs+剪枝
点击打开链接#include #include #include using namespace std;const int M =20;int a[M],s,n,res[M],visit[M],flag;bool check(int x,int y){ for(int i=x;i<y;i++) { if(a[i]==a[y]) return 1; } retur原创 2016-07-22 17:14:19 · 305 阅读 · 0 评论 -
hdu 1180 bfs(奇偶性)
点击打开链接#include #include #include #include using namespace std;const int M=30;typedef struct{ int x2; int y2;}MOVE;MOVE Move[4]={{-1,0},{0,-1},{1,0},{0,1}};struct Node{ int x; int y; in原创 2016-06-05 22:52:48 · 292 阅读 · 0 评论 -
poj 3669 bfs+预处理
点击打开链接#include #include #include #include using namespace std;const int MAX=305;typedef struct{ int x; int y;}Move;Move move[4]={{-1,0},{1,0},{0,-1},{0,1}};struct Node{ int x; int y;原创 2016-06-05 16:15:37 · 323 阅读 · 0 评论 -
FZU 2186 BFS+状压(类似TSP)
点击打开链接#include #include #include #include using namespace std;const int inf=0x3f3f3f3f;const int M = 110;typedef struct{ int x; int y; int t;}node;node move[4]={{-1,0},{1,0},{0,-1},{0,1}原创 2016-09-08 13:00:01 · 334 阅读 · 0 评论 -
hdu 5025 bfs+状态压缩
点击打开链接#include #include #include #include #include using namespace std;const int M=110;int n,m,ans;char g[M][M];int snum,snake[M][M];// 记录snake的位置 int sx,sy;int vis[M][M][15][1<<6];//vis[原创 2016-09-16 16:30:28 · 336 阅读 · 0 评论 -
Hihocoder 1054 滑动解锁 暴力dfs
点击打开链接题意:手机滑动解锁,要求长度至少为4 每次可以走到相邻点,每个点只经过一次,给出某个路径的一部分n条边,问该路径有多少合法方案 两个点相邻当且仅当以这两个点为端点的线段上不存在尚未经过的点 4213合法,132非法 首先保存i->j时必须经过中间点,不考虑路径要求的n条边时 容易用dfs算出所有可能路径 由于最终路径要包含所给n条边,则dfs时记录路径中的边原创 2017-03-21 18:45:52 · 438 阅读 · 0 评论 -
Codeforces 750D New Year and Fireworks 暴力BFS
点击打开链接n不重复的点只有6e4个,bfs暴力模拟烟花扩散过程即可 #include using namespace std;typedef long long ll;const int N=3e2+20;struct node{ int x,y,cnt,dir;//cnt:烟花层数,dir:进入的方向 }tmp;int t[N],n;int mp[N][N];in原创 2017-01-02 21:43:47 · 397 阅读 · 0 评论 -
Codeforces 66D World tour BFS+枚举
点击打开链接题意:给一个有向图 求出4个点最短距离和最大 (nd(a+b+c+d)要最大 枚举b,c 因为路程要最大 找到离b最远a和离c最远d即可#include #include #include using namespace std;const int N=5e3+20;const long long inf=2e7;vector e[N];int n,m,A,B原创 2016-12-13 22:13:30 · 338 阅读 · 0 评论 -
hdu 2181 哈密顿绕世界(dfs+回溯)
点击打开链接#include #include #include using namespace std;const int N=30;int g[N][5],m,cnt=0;int vis[N],path[N];void print(){ printf("%d: ",cnt); for(int i=1;i<=21;i++) { printf("%d",path[原创 2016-10-19 22:08:49 · 419 阅读 · 0 评论 -
hdu 1560 DNA sequence(IDA*)
点击打开链接IDA* :限制dfs深度+最优性cut#include #include #include using namespace std;const int N=10;int n;char DNA[5]={"ACGT"},s[N][N];int pos[N];//pos[i]:s[i]目前匹配的字符个数 int size[N];//char seq[N];//母串原创 2016-10-25 14:13:14 · 318 阅读 · 0 评论 -
hdu 4474 数位搜索bfs
点击打开链接题意:0-9这十个数字里面的若干个数字组合出一个数,使这个数是N的倍数,求最小的这个这样的数,不存在的话输出-1。如果枚举n的倍数 但是不确定到哪里为止输出-1。对于 a,b同余n &&b>a 保留a即可 因为a*10+k,b*10+k同余n,a,b同解所以队列结点保存余数&&由上得:不保存相同余数,BFS时在末尾添加数字生成新的余数,直到余数为0即可原创 2016-11-03 22:42:38 · 389 阅读 · 0 评论 -
poj 3740 dfs回溯
点击打开链接#include #include #include #include #include #include using namespace std;typedef long long ll;const int N=20;int col[310];//col[i] 第i列的和 int a[N][310];bool flag;int m,n;bool che原创 2016-10-12 12:39:55 · 303 阅读 · 0 评论 -
codeforces 375D dfs+模拟
点击打开链接#include #include #include #include using namespace std;const int N=1e3+20;char g[N][N];int n,m,k,vis[N][N],res;bool flag;struct Move{ int x; int y; int k;//.个数 }off[4]={{-1,0},{原创 2016-10-09 12:08:23 · 311 阅读 · 0 评论 -
hdu 5024 记忆化搜索
点击打开链接#include #include #include #include #include using namespace std;const int M=110;int n,m,ans;int dp[M][M][8][2];//dp[x][y][d][k] 以当前(x,y)为起点,当前方向为d 转弯次数为k时最远能走多远 char g[M][M];const原创 2016-09-16 18:37:20 · 309 阅读 · 0 评论 -
poj 1007 双向bfs+set判重
点击打开链接#include #include #include #include #include #include using namespace std;const int M=30;const int MAX=400000;char move[]={"rlud"},str[M],data[M],goal[]={"123456789"};struct Node{ l原创 2016-06-04 17:51:09 · 301 阅读 · 0 评论 -
hdu 2616 dfs回溯暴力
点击打开链接#include #include #include using namespace std;const int M=20;typedef struct{ int x; int y;}Spell;Spell s[M];int n,visit[M],flag;int Min;void dfs(int cur,long m){ if(m<=0) {原创 2016-06-04 21:07:57 · 355 阅读 · 0 评论 -
poj 1011 经典的剪枝
点击打开链接#include #include #include #include using namespace std;const int M=1100;vector p;int n,L,len,flag,last,used[M];bool cmp(int a,int b){ return a>b;}int dfs(int cur,int l){ if(cur=原创 2016-05-28 17:44:39 · 343 阅读 · 0 评论 -
nyoj 素数环
#include #include #define M 21int flag,visit[M],Prime[M+M],n,ans[M]; void dfs(int cur){ int i,j,k; if(cur==n+1) { if(Prime[ans[cur-1]+1]) // 最后一个和头一个也是素数则成立 { flag=1; for(i=1;i<=原创 2016-05-05 15:50:11 · 326 阅读 · 0 评论 -
poj 1724 dfs+剪枝
http://poj.org/problem?id=1724#include #include #define M 110typedef struct Node{int adj;int length;int money;struct Node *next;}Edge;typedef struct Vnode{struct Node *first;原创 2016-05-04 12:50:14 · 484 阅读 · 0 评论 -
nyoj 722 Sudoku (暴力搜索)
点击打开链接http://acm.nyist.net/JudgeOnline/problem.php?pid=722#include #define M 10int g[M][M],flag;int check(int x,int y,int num){ int i,j,a,b; a=(x/3)*3; //算出所处9宫格的第一个位置 b=(y/3)*3; for(i=a;i原创 2016-05-10 13:16:17 · 381 阅读 · 0 评论 -
zoj 1002回溯搜索
题目 点击打开链接#include #include typedef struct{ int x; int y;}Move;Move move[4]={{-1,0},{1,0},{0,-1},{0,1}};char g[5][5];int max,n;int check(int x,int y){ int i,j,k,a,b; for(i=0;i<4;i++)原创 2016-04-25 19:26:27 · 693 阅读 · 0 评论 -
nyoj 82迷宫寻宝
http://acm.nyist.net/JudgeOnline/problem.php?pid=82#include #include #define M 25typedef struct{int x;int y;int num;}Move;Move move[4]={{-1,0,0},{0,1,0},{1,0,0},{0,-1,0}},door[6];//保存门的坐标原创 2016-04-26 15:30:40 · 582 阅读 · 0 评论 -
poj 1190 dfs+剪枝
点击打开链接http://poj.org/problem?id=1190#include #include #include #define M1 30using namespace std; //Q=Sπ求最小S->外表面最小 = (侧面积面积+底面积(中间部分都投影到底面))最小 int MinA[M1]; //i层 cake的最小表面积 int MinV[M1];i原创 2016-05-29 19:04:53 · 280 阅读 · 0 评论 -
hdu 5676 dfs打表
http://acm.hdu.edu.cn/showproblem.php?pid=5676#include #include using namespace std;#define M 100000000__int64 table[M],k=0;void dfs(int p4,int p7,__int64 s) //用dfs打表 { if(p4+p7<=18&&p4<=9&&p原创 2016-05-07 16:33:22 · 404 阅读 · 0 评论 -
poj 3050 dfs+set判重
点击打开链接#include #include #include #include using namespace std;const int M=10,n=5;int g[M][M];typedef struct{ int x; int y;}Move;Move move[4]={{-1,0},{1,0},{0,-1},{0,1}};stack stk;set >原创 2016-06-03 15:36:03 · 299 阅读 · 0 评论 -
poj 2718 暴力dfs
点击打开链接#include #include #include #include #include using namespace std;const int M=20;int a[M],visit[M],num,Min;void solve(int y){ int i,k=0,x=0,b[M]; for(i=0;i<num;i++) { if(!visit[i]原创 2016-06-03 14:00:28 · 344 阅读 · 0 评论 -
hdu 1010 dfs+奇偶性剪枝
点击打开链接奇偶剪枝:把矩阵标记成如下形式:0,1,0,1,01,0,1,0,10,1,0,1,01,0,1,0,1很明显,如果起点在0 而终点在1 那显然 要经过奇数步才能从起点走到终点,依次类推,奇偶相同的偶数步,奇偶不同的奇数步奇偶剪枝:读入的时候起点记为(Si,Sj) 终点记为(Di,Dj) 判断(Si+Sj) 和 (Di+Dj) 的奇偶性 如果与要求步数奇原创 2016-06-07 17:15:23 · 391 阅读 · 0 评论 -
hdu 1078 记忆化搜索
点击打开链接#include #include #include using namespace std;const int M = 110;typedef struct{ int x1; int y1; }Num;Num Move[4]={{-1,0},{1,0},{0,-1},{0,1}};int ans,n,k,g[M][M],dp[M][M]; //dp[i][j]原创 2016-06-07 14:24:52 · 343 阅读 · 0 评论 -
hdu 2822 bfs+优先队列
点击打开链接#include #include #include #include #include using namespace std;const int M =1010;struct Node{ int X; int Y; int dist; Node(int x1,int y1,int d):X(x1),Y(y1),dist(d) { } bool原创 2016-06-06 21:44:14 · 359 阅读 · 0 评论 -
poj 1426 dfs~
点击打开链接#include #include #include using namespace std;const int M=200;int n,ans=0,num[M],k;void dfs(long long y,int cur){ if(!ans&&cur<19) // 限制位数字18为内 { if(y%n) { //long rem=y%原创 2016-06-02 15:41:56 · 271 阅读 · 0 评论 -
poj 3278 水bfs
点击打开链接#include #include #include #include using namespace std;const int M=210000;const int inf=100000;struct Node{ int x; int dist; Node(int x1,int dist1):x(x1),dist(dist1) { }};queue原创 2016-06-01 16:22:01 · 309 阅读 · 0 评论 -
poj 3009 dfs
点击打开链接#include #include using namespace std;const int M=25;int g[M][M],w,h,sx,sy,ex,ey,ans=1<<5;typedef struct{ int x; int y;}Move;Move move[4]={{-1,0},{1,0},{0,-1},{0,1}};void dfs(int cur原创 2016-06-01 20:13:10 · 261 阅读 · 0 评论 -
hdu 1427 24点暴力dfs
点击打开链接#include #include #include using namespace std;int num;int a[4],x;const int inf=1<<10; // 括号改变的运算符的优先级所以 //a@b@c@d 符号的全排列有 3!种可能 由于数字可以调换 ((a@b)@c) @d 等价于 a @ ((b@c)@d原创 2016-05-31 20:46:04 · 886 阅读 · 0 评论