搜索
lcxdz
这个作者很懒,什么都没留下…
展开
-
P6154 游走(记忆化搜索
添加链接描述原创 2022-06-11 15:04:32 · 247 阅读 · 0 评论 -
P1434 [SHOI2002] 滑雪 (记忆化搜索
添加链接描述原创 2022-06-11 14:45:42 · 209 阅读 · 0 评论 -
B. I Hate 1111 (记忆化搜索 数论
添加链接描述可以发现高位的1111都可以由11或者111组成 那么判断是否能被11整除 或者减去111再整除记忆化mp存储是否可以组成原创 2022-06-11 12:01:26 · 162 阅读 · 0 评论 -
L3-001 凑零钱 (30 分) (剪枝 dfs
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e4+9;int arr[N],sum[N];vector<int>ans;int n,m,flag=0;void dfs(int now,int nx){ // cout<<sum<<"\n"; if(flag||now+sum[n]-sum[nx-1]<m)return ; if(now==原创 2022-04-21 21:10:08 · 200 阅读 · 0 评论 -
L2-031 深入虎穴 (25 分) (dfs
#include<bits/stdc++.h>using namespace std;const int N=1e5+9;int in[N];vector<int>v[N];int mx,ans;void dfs(int u,int fa,int deep){ if(deep>mx){ mx=deep; ans=u; } for(auto it:v[u]){ if(fa==it)continue原创 2022-04-21 21:08:16 · 150 阅读 · 0 评论 -
L2-026 小字辈 (25 分)(dfs
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e5+9;vector<int>v[N];vector<int>ans;int mx=0;void dfs(int u,int fa,int now){ if(now>mx){ mx=now; ans.clear(); } if(now==mx){ if(u原创 2022-04-19 16:58:00 · 46 阅读 · 0 评论 -
L2-023 图着色问题 (25 分)(dfs 细节
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=510;vector<int>v[N];int arr[N],ok,vis[N];bool dfs(int u){ vis[u]=1; for(auto it:v[u]){ if(arr[it]==arr[u])return 0; if(!arr[it])return dfs(it);//最后标记是否检测原创 2022-04-19 16:54:58 · 83 阅读 · 0 评论 -
L2-020 功夫传人 (25 分)(dfs
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e5+9;#define int long longint arr[N];vector<int>v[N];int in[N];double ans;int n;double z,r;void dfs(int u,int fa,double p){ if(arr[u]!=-1)ans+=p*arr[u]; for(auto i原创 2022-04-19 16:05:12 · 133 阅读 · 0 评论 -
L2-016 愿天下有情人都是失散多年的兄妹 (25 分)(dfs
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e5+5;int sex[N],vis[N];vector<int>v[N];int flag;void dfs(int u,int step){ if(step>=5)return; for(auto it:v[u]){ if(it==-1)continue; if(vis[it])flag=原创 2022-04-18 13:39:39 · 104 阅读 · 0 评论 -
L2-013 红色警报 (25 分) (去边 dfs
添加链接描述#include <bits/stdc++.h>using namespace std;const int N = 510;int dist[N][N];int ans, vis[N];int n, m;void dfs(int u){ vis[u] = 1; for (int i = 0; i < n; i++) { if (vis[i]||!dist[u][i]) continue; dfs(i); }}int main(){/原创 2022-04-18 13:32:46 · 75 阅读 · 0 评论 -
3417. 砝码称重 (dp
添加链接描述时隔一年 不看题解在模拟赛上写出来了 超兴奋哈哈哈#include<bits/stdc++.h>using namespace std;const int N=1e5+9;int dp[110][N];//前i个 重量为jint arr[110];int mp[N];int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>arr[i];原创 2022-04-07 19:58:41 · 328 阅读 · 0 评论 -
1113. 红与黑 (dfs
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=30;int n,m;int stx,sty;int vis[N][N];string s[N];int ans=0;int dx[]={0,0,1,-1};int dy[]={1,-1,0,0};void dfs(int x,int y){ for(int i=0;i<4;i++) { int nx=x+dx[i]原创 2022-04-07 13:22:18 · 119 阅读 · 0 评论 -
1101. 献给阿尔吉侬的花束 (bfs
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=210;string s[N];typedef pair<int,int> pii;pii st,ed;int mp[N][N],vis[N][N];int dx[]={0,0,1,-1};int dy[]={1,-1,0,0};int n,m;int bfs(){ queue<pii>q; q.push(st);原创 2022-04-07 13:04:11 · 349 阅读 · 0 评论 -
迷宫 (bfs 逆序建图 三维压缩
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e7+9;int dist[N];int dx[]={1,-1,0,0,0,0};int dy[]={0,0,1,-1,0,0};int dz[]={0,0,0,0,1,-1};struct node{ int a,b,c;};int n,m,h,Q;int get(int a,int b,int c){ return (c)*n*m原创 2022-04-05 15:04:04 · 141 阅读 · 0 评论 -
和谐之树 (分治 递归
添加链接描述#include<bits/stdc++.h>using namespace std;#define int long long int get_h(int h){ int ans=0,p=1; while(p<=h){ ans++; p<<=1; } return ans;}int solve(int u,int l,int r){ if(l==r)return u; el原创 2022-04-04 17:57:39 · 208 阅读 · 0 评论 -
gk的树 (dfs 贪心 子节点考虑
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e5+9;vector<int>v[N];int ans;int n,k;int dfs(int u,int fa){ int p=v[u].size();//全部结点 for(auto it:v[u]){ if(it==fa)continue;; p-=dfs(it,u);//如果子节点数量大于k-原创 2022-04-03 22:48:39 · 381 阅读 · 0 评论 -
796. 子矩阵的和 (二维前缀和
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e3+9;int arr[N][N],sum[N][N];int main(){ int n,m,q; cin>>n>>m>>q; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ int x;原创 2022-03-24 11:49:13 · 112 阅读 · 0 评论 -
1208. 翻硬币 (递推 一维翻转m个都可以由下一个唯一确定
添加链接描述#include<bits/stdc++.h>using namespace std;string st,ed;void turn(int x){ if(st[x]=='*')st[x]='o'; else st[x]='*';}int main(){ cin>>st>>ed; int ans=0; for(int i=0;i<st.size()-1;i++){ if(st[原创 2022-03-24 10:46:07 · 126 阅读 · 0 评论 -
116. 飞行员兄弟 (二进制枚举暴力
添加链接描述因为这题是改变当前行和列所以元素,数据只有16个数,2^16<1e8所以直接二进制枚举所有元素是否开关#include<bits/stdc++.h>using namespace std;const int N=10;char ch[N][N],turnup[N][N];void turn(int x,int y){ for(int i=0;i<4;i++){ for(int j=0;j<4;j++){原创 2022-03-24 10:16:46 · 163 阅读 · 0 评论 -
1209. 带分数 (排列型枚举 嵌套dfs
添加链接描述#include<bits/stdc++.h>using namespace std;#define int long longconst int N=15;int n;int ans,vis[N];bool check(int a,int b,int c){ if(a==0||!b||!c)return 0; // cout<<a<<" "<<b<<" "<<c<<"\n";原创 2022-03-24 09:52:53 · 130 阅读 · 0 评论 -
95. 费解的开关 (二进制枚举 指数型dfs
添加链接描述当前行如果有灭的,只能通过下一行改变,二进制枚举第一行的开关情况,根据第一行递推改变,判断最后一行是否全亮#include<bits/stdc++.h>using namespace std;const int N=10;char mp[N][N],backup[N][N];int dx[]={0,0,1,-1,0};//注意是五个点int dy[]={1,-1,0,0,0};void turn (int x,int y){ for(int i=0;i<原创 2022-03-24 09:48:01 · 123 阅读 · 0 评论 -
93. 递归实现组合型枚举 (dfs stl prev_permutation
添加链接描述stl#include<bits/stdc++.h>using namespace std;int arr[50];int main(){ int n,m; cin>>n>>m; for(int i=1;i<=m;i++){ arr[i]=1; } do{ for(int i=1;i<=n;i++){ if(arr[i]){原创 2022-03-22 15:25:52 · 578 阅读 · 0 评论 -
94. 递归实现排列型枚举 (dfs
添加链接描述从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数 n。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好 1 个空格隔开。对于没有选任何数的方案,输出空行。本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。数据范围1≤n≤15输入样例:3输出样例:322 311 31 21 2 3难度:简单时/空限制:5s / 256MB总通过数:27615总尝试数:42615来源:《算法竞原创 2022-03-22 14:28:38 · 339 阅读 · 0 评论 -
AcWing 92. 递归实现指数型枚举 (dfs 二进制枚举 选或不选
添加链接描述#include<bits/stdc++.h>using namespace std;int main(){ int n; scanf("%d",&n); for(int i=0;i<1<<n;i++){ for(int j=0;j<n;j++){ if((i>>j)&1){ printf("%d ",j+1);原创 2022-03-22 14:20:35 · 151 阅读 · 0 评论 -
3346. 你知道你的ABC吗 (思维 全排列 dfs
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=10;int arr[N];int flag=0;void dfs(int a,int b,int c,int n1,int n2,int n3){ if(n1>=7||n2>=7||n3>=7||flag)return; vector<int>res; res.push_back(a); res.pu原创 2022-03-21 20:04:59 · 350 阅读 · 0 评论 -
瓜瓜上电工 (dfs 全排列
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=100;typedef pair<int,int> pii;pii arr[N];int ans=0x3f3f3f3f;int n,q;int vis[N];void dfs(int step,int x,int y,int sum){ if(step==q){ ans=min(ans,sum); retu原创 2022-03-20 18:49:54 · 167 阅读 · 0 评论 -
7-102 喊山 (30 分)(bfs
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e4+9;vector<int>v[N];int ans=0,num=0x3f3f3f3f,ans_point=0;int vis[N];typedef pair<int,int>pii;void bfs(int st){ queue<pii>q; q.push({st,0}); while(q.s原创 2022-03-16 22:40:22 · 495 阅读 · 0 评论 -
T229475 F1. 生活在树上(easy version) (异或前缀和 思维 bfs
添加链接描述从一点到两个a,b直接的路程异或公共路径会被异或相消所以本质就是路径上的点异或前缀,从一点开始得到每个点的异或前缀,从当前路径开始又可以推断出相同路径相消,所以本质就是前缀和查询#include<bits/stdc++.h>using namespace std;#define int unsigned long long//2的64次方 注意开ullconst int N=5e5+9;int e[N],ne[N],h[N],w[N],idx;void add(int原创 2022-03-12 19:43:16 · 520 阅读 · 0 评论 -
2020pat冬 7-4 Chemical Equation (30 分) (dfs 图的存储
添加链接描述先存图然后搜索#include<bits/stdc++.h>using namespace std;const int N=1e3+9;int exist[N],product[N];struct node { int pro; vector<int>ne;};unordered_map<int,vector<node>>equ;bool cmp(node a,node b){ return a.ne<原创 2022-03-04 17:30:48 · 114 阅读 · 0 评论 -
2020pat冬 7-3 File Path (25 分) (dfs 注意编号
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e4+9;int vis[N];typedef pair<int,int> pii;vector<int>v[N];vector<int>d[N];vector<int>ans;int book[N];void dfs(int u,int ed){ if(u==ed){ cout&l原创 2022-03-04 17:27:48 · 89 阅读 · 0 评论 -
861. 二分图的最大匹配 (dfs
添加链接描述#include<bits/stdc++.h>using namespace std;int n1,n2,m;const int N=1e5+9;int e[N],ne[N],h[N],idx;void add(int a,int b){ e[idx]=b,ne[idx]=h[a],h[a]=idx++;}int vis[N];int ans,res[N];bool dfs(int u){ for(int i=h[u];~i;i=ne[i]){原创 2022-03-03 14:13:47 · 88 阅读 · 0 评论 -
2021pat春 7-4 Recycling of Shared Bicycles (30 分) (dfs 思维
添加链接描述一条路找最近最小的点#include<bits/stdc++.h>using namespace std;const int N=200+9;int arr[N];int dist[N][N],vis[N];int res=0;vector<int> ans;int n,m;void dfs(int u){ ans.push_back(u); vis[u]=1; int t=-1; for(int i=1;i<=n原创 2022-03-01 20:22:44 · 161 阅读 · 0 评论 -
2021pat秋 7-3 Playground Exploration (25 分) (dfs 阅读理解
添加链接描述he/she will always choose the next destination with the smallest number, and he/she would never want to visit the same spot twice.下一个最小的数字而不是比当前小,用的最高级~~提示我们要排序标点和dij很像#include<bits/stdc++.h>using namespace std;const int N=1e3+9;vector&l原创 2022-02-28 10:14:34 · 280 阅读 · 0 评论 -
7-3 Size of Military Unit (25 分) (记忆化 dfs
添加链接描述图的遍历 ,记忆化不会超时#include<bits/stdc++.h>using namespace std;vector<int>v[100005];int ans=0;const int N=1e5+9;int vis[N];int dist[N];void dfs(int u){ if(dist[u]){ans+=dist[u];return ;} else ans++; for(auto it:v[u]){原创 2022-02-27 17:00:26 · 126 阅读 · 0 评论 -
1155 Heap Paths (30 分) (堆 中右左遍历 dfs模板 0/30
添加链接描述判断堆 输出堆的中右左 递归#include <bits/stdc++.h>using namespace std;const int N = 1e3 + 9;int arr[N];vector<int> ans;int n;void dfs(int root){ if (root * 2 > n) { int ok = 1; cout << ans[0]; for (a原创 2022-02-26 15:16:05 · 88 阅读 · 0 评论 -
163小孩 (dfs 全排列
添加链接描述选13张牌 ,每个牌最多选4张 一共选6张有多少个相加结果一样#include<bits/stdc++.h>using namespace std;int ans;void dfs(int now,int last){ if(now==14){//如果分好13张牌 if(!last)//此时选了六张牌 ans++; return ; } for(int i=0;i<=min(last,4);i+原创 2022-02-11 15:19:57 · 283 阅读 · 0 评论 -
1021 Deepest Root (25 分)(思维 二叉树的最深点 dfs 并查集
添加链接描述先通过并查集找到个数然后dfs先通过随意一点找到最深的点得到B 然后在B中选一点找到最深的点得到A 这样A 与B的并集就是答案#include<bits/stdc++.h>using namespace std;const int N=1e4+9;vector<int>v[N];int fa[N];int find(int x){ if(fa[x]==x)return x; else return fa[x]=find(fa[x]);原创 2022-02-06 18:45:52 · 167 阅读 · 0 评论 -
1018 Public Bike Management (30 分)(dijkstra+dfs 0/30
添加链接描述首先要找到最短路径如果有多条最短路径找需要发送的自行车最少,如果还相同找最少的返回数量,题目保证唯一首先链式前向星+堆优化dijkstra找到最短路径的可能dfs寻找最小的值,因为不满足最优子结构只能爆搜注意点:1.pre[y].push_back(x)!!是y后加x 这样路径倒叙2.e[idx]=b,ne[idx]=h[a],h[a]=idx++牢记3. q.push({dist[y],y});//!!!别忘了加入队列4. cmax/2而不是cmax5.注意dfs爆搜 要原创 2022-02-05 16:09:57 · 81 阅读 · 0 评论 -
幸运数字Ⅱ (二分 dfs
添加链接描述#include <bits/stdc++.h>using namespace std;const int N = 1e4 + 9;#define int long longint num[N], tot;void dfs(int x){ if (x > 5e9) return; num[tot++] = x; dfs(x * 10 + 4); dfs(x * 10 + 7);}signed main(){原创 2022-01-26 12:37:50 · 381 阅读 · 0 评论 -
迷宫 (bfs
添加链接描述因为这题只有一个门一个钥匙 所以bfs即可 否则需要状压book 是没有拿到钥匙的标记 vis是拿到钥匙后的标记 前者是第一次遍历 后者是第二次遍历如果拿到钥匙 那就标记当前key为1 然后加入队列 将book vis都标记没有拿到钥匙 判断第一次遍历还是第二次遍历#include<bits/stdc++.h>using namespace std;const int N=1000;typedef long long ll;int mod=100000原创 2022-01-26 12:19:05 · 178 阅读 · 0 评论