搜索
回溯与分支限界
Biang-Biang
干巴得
展开
-
扩散
本题总分:5 分【问题描述】小蓝在一张无限大的特殊画布上作画。这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。小蓝在画布上首先点了一下几个点:(0, 0), (2020, 11), (11, 14), (2000, 2000)。只有这几个格子上有黑色,其它位置都是白色的。每过一分钟,黑色就会扩散一点。具体的,如果一个格子里面是黑色,它就会扩散到上、下、左、右四个相邻的格子中,使得这四个格子也变成黑色(如果原来就是黑色,则还是黑色)。请问,经过 2020 分钟后,画布上有多原创 2020-11-16 16:24:15 · 554 阅读 · 1 评论 -
第十届蓝桥杯E.迷宫
思路:主要是不知道该如何存储路径,如下可以用一个struct,在造一个构造函数,这样用node(1,2,"abc")就相当于 node point; point.x=1; point.y=2; point.path="abc"struct node{ int x,y; string path; node(int _x,int _y, string _path){ x=_x; y=_y; path=_path; }...转载 2020-09-20 00:40:12 · 77 阅读 · 0 评论 -
数的分解+四平方和
题意:把2019分成三个不同的数,且分解的数各位上不能含2和4;思路:由于三个数个不相等,那么他们之间一定存在大小关系;写一个三重循环,i ,j ,k; 保证i<j<k;且i+j+k=2019;for(int i=1;i*3<x;i++){ if(check(i)) for(int j=i+1;x-i-j>j;j++) if(check(j)&&check(x-i-j)) cnt+...原创 2020-09-20 22:44:19 · 325 阅读 · 0 评论 -
逃离迷宫
题目链接:https://vjudge.net/contest/397228#problem/C题意:给出一个迷宫,一个起点和一个终点,求从七点到终点的最小转弯次数。思路:用vis[maxn][maxn]记录,每个点访问一次#include<bits/std.c++>using namespace std;#define IOS ios::sync_with_stdio(false)#define ll long longconst int inf=0x3f3f3f3f;cha原创 2020-10-02 09:28:08 · 179 阅读 · 0 评论 -
C. The Two Routes最短路径
题目:Click/*广搜最短路径*/#include<iostream>#include<algorithm>#include<cmath>#include <vector> #include <string> #include <cstring> #include <queue>using namespace std;const int maxn=405;int n,m;int dis.转载 2020-08-08 22:34:04 · 186 阅读 · 0 评论 -
程序设计:抠图(bfs)
题目:https://nanti.jisuanke.com/t/A2230思路:把外围为1的坐标点挑出来入队,广搜为1的坐标,将它们的值都变为0,产生的图就是答案;注意输出很恶心,不要输出多余的0#include<bits/stdc++.h>int mp[505][505];int dir[4][2]={0,1,1,0,0,-1,-1,0};queue<pair<int,int> >que;int main(){ int T; cin>>T原创 2020-09-14 20:06:09 · 219 阅读 · 0 评论 -
糖果 (蓝桥杯)
题目:https://www.acwing.com/problem/content/description/1245/dfs+剪枝预处理每一列的可选状态, 选择需要被覆盖的列中的最小的分支#include<iostream>#include<algorithm>#include<cstdio>#include<vector>#include<algorithm>using namespace std;const int N=1原创 2021-03-22 11:10:57 · 802 阅读 · 1 评论 -
第三次积分赛
题目:传送门A思路:糖的数目从小到大依次为a,b,cc≥(a+b)c\geq(a+b)c≥(a+b) ans=a+bans=a+bans=a+bc≤(a+b)c\leq(a+b)c≤(a+b) ans=c+(a+b−c)/2ans=c+(a+b-c)/2ans=c+(a+b−c)/2#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using原创 2021-02-08 10:49:37 · 111 阅读 · 0 评论 -
C. Kefa and Park(dfs)
题目链接:https://codeforces.com/contest/580/problem/C题意:给一棵以1为根节点的树,每个节点有0,1两种值,当这棵树从1到叶节点的路径上连续的1的数目不超过m时,则此叶节点为好点,问一共有多少个好点反思:当时误判这棵树为有向图,但实际上是无向的。总结:在邻接表中叶结点的判断方法:1.有向图 h[u]==-1, u就是叶结点2.无向图需要进行标记,当一个点的子节点都去过了,那么此点即为叶结点。代码 #include<ios..原创 2021-01-11 00:04:30 · 289 阅读 · 0 评论 -
n皇后问题
题目链接:https://www.acwing.com/problem/content/845/枚举每一行,判断列,对角线是否满足条件#include<iostream>#include<cstdio>using namespace std; const int N=20;char g[N][N];bool st[N], dg[2*N], udg[2*N];int n;void dfs(int u){ if(u==n){ for(int i=0;i<原创 2020-12-12 23:40:26 · 107 阅读 · 0 评论 -
滑雪(记忆化搜索+dp)
题目链接:https://www.acwing.com/problem/content/903/思路:f(i,j)表示从当前(i,j)开始滑的集合 属性:Max#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int N=310;int h[N][N], f[N][N], n,m;int di转载 2020-11-11 20:55:58 · 121 阅读 · 0 评论 -
递归模板
递归实现指数型枚举给出一个集合的所有子集题目链接:https://www.acwing.com/activity/content/problem/content/1545/1///学会画递归搜索树 #include<iostream>#include<cstdio>using namespace std;int st[20],n;void dfs(int u){ //0表示在考虑,1选,2表示不选 if(u>n){ for(int i=1;i<=n原创 2020-10-27 21:05:41 · 385 阅读 · 0 评论 -
B. Coloring a Tree
题目:https://vjudge.net/contest/392676#problem/H 题意比较费解题意:给n个点;给出n-1 个pi,即当前节点(坐标)的父节点,构成一棵树;给出n个颜色,将对应坐标涂成相应的颜色;问最少需要几次;(涂抹规则可以看样例)提炼:遍历每个节点,如果当前节点和它的父节点颜色不同,则代表需要重新涂色#include<bits/stdc++.h>using namespace std;const int N=1e4+5;int a[N],b[N.转载 2020-09-06 15:53:04 · 198 阅读 · 0 评论 -
拜托了,牛老师(dfs)
题目:https://ac.nowcoder.com/acm/problem/210638题意提炼:给出一个数x,将x进行因式分解,使x的每个因子各不相同,且使x的所有因子和最小,求x最小的因子和思路:先初始化因子和 ans=x+1; 然后找出可整除x的i dfs(x/i;sum+i)#include <iostream>#include <algorithm>using namespace std;const int N = 1e6 + 5;b...原创 2020-09-05 11:30:27 · 85 阅读 · 0 评论 -
B. Tournament
题目:Click先判断是哪两个人没有比赛 再dfs加深了对dfs的理解灵活利用 dfs(参数) 中的参数 用vis[ ] 记录某个点,用于判断这个点是否深搜过;这可以避免死循环或大大减短搜索时间#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<vector>#...原创 2020-08-09 22:46:48 · 173 阅读 · 0 评论 -
HDU_Tree(带权树)
题目链接:Click题意提炼:一棵树有n个结点,用k种颜色涂每个节点;定义Ei为颜色i相互连接的边的集合;求最大的E1E2E3E4E5...的值题解:对边->对结点 若一个结点 其所有子节点(包括其自身)能涂抹k个颜色,除去其子节点的其他部分也能涂抹k个颜色,则此点入度即为可行的边可以用dfs()遍历此节点的所有子节点(),求出其结点数m,如果满足m>=k&&n-m>=k 则此节点出度边可行/*带权结点*/#include<iostream&g..转载 2020-08-03 09:52:51 · 706 阅读 · 0 评论 -
C. Uncle Bogdan and Country Happiness(树+dfs)
题目链接:Click 利用vector数组储存结点之间联系 (相当于邻接表) 关系 g[father]>=g[son] (g[N]储存开心人的数目) dfs()的实现 #include<iostream>#include<vector>#include<algorithm>using namespace std;const int N=1e5+7;vector<int> gr[N]; //储存结点之...原创 2020-07-31 17:54:04 · 156 阅读 · 0 评论