![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
递归
基础算法
ღ江晚吟
如果浮生若梦,万事无常,最终都归于尘土,那么也许我们的雄心壮志不过徒然为荒诞不经的玩笑而已。如果我们无可救药地执着于自己的意义,或许也只能安于自身的可笑。
展开
-
P1923 【深基9.例4】求第 k 小的数
思路根据k来对数组进行快排。把数组分为3部分,然后来递归查询。源码#include<bits/stdc++.h>using namespace std;int x[5000005],k;void qsort(int l,int r){ int i=l,j=r,mid=x[(l+r)/2]; do { while(x[j]>mid) j--; while(x[i]<mid) i++; if(i<=j) { swap(x[i],x[.原创 2021-03-17 17:49:24 · 106 阅读 · 0 评论 -
P1228 地毯填补问题(递归+分治)
P1228 地毯填补问题思路其实这道题目一点也不会写,光看懂别人的解题思路就花了好长时间。那现在我来说说我对这个题目的理解。1.所谓拐点就是每种毯子,中间的那块,也就是那个点的坐标。2.可以发现当格子22时,必有一种填充方式。3.由2引申,我们可以把迷宫全部分成22,也就是递归结束的标志。源码#include <cstdio>using namespace std;int n,k,a[1201][1201];//这道题目的思路:找中点,然后判断中点的位置。公主的位置有原创 2021-02-03 20:24:13 · 1312 阅读 · 0 评论 -
P1928 外星密码(递归)(栈)
思路起初看到这题的时候,一脸懵逼不知道该怎么写,我是这么想的一来就把所有的数据都输入,但是然后就不知道怎么写了。当我看到别人的思路才没明白,原来一个一个输入才是正确的。1.先寻找左括号,然后输入次数,再把次数叠加(再次递归,因为继续输入的不是左括号,右括号,直接加上去就行了)2.找到了右括号,则直接返回就行。源码#include<bits/stdc++.h>using namespace std;string fun(){ int n; string s="",s1;.原创 2021-02-03 19:07:02 · 485 阅读 · 0 评论 -
P5461 赦免战俘(递归)
思路这题就是要用递归来写。就是分成四个区域,然后把第一块全部赋值为0,然后继续递归。结束条件就是正方形的边为2。源码#include<bits/stdc++.h>using namespace std;int vis[1050][1050];int n;void dfs(int p,int x,int y){ if(p==2){ //结束条件,将左上角赋值为0 vis[x][y]=0; return ; } for(int i=x;i<=x+p/.原创 2021-01-30 15:26:49 · 371 阅读 · 2 评论 -
网页跳转(栈)
描述蒜头君每天都在用一款名为 “蒜厂浏览器” 的软件。在这个浏览器中,一共三种操作:打开页面、回退和前进。它们的功能如下:打开页面:在地址栏中输入网址,并跳转到网址对应的页面; 回退:返回到上一次访问的页面; 前进:返回到上次回退前的页面,如果上一次操作是打开页面,那么将无法前进。现在,蒜头君打开浏览器,进行了一系列操作,你需要输出他每次操作后所在页面的网址。输入第一行输入一个整数 t(0 < t <= 10),表示有 t 组数据。 第二行输入一个整数 n(0 <原创 2021-01-27 12:36:45 · 418 阅读 · 0 评论 -
括号匹配(栈)
思路就是创建一个栈,然后将左括号进栈,之后寻找右括号,找到了,则匹配成功。若最后栈中还有括号剩余,则输出NO源码#include<bits/stdc++.h>using namespace std;char s[500005];stack<int> st;int ans[500005];int main(){ int len; bool f; cin>>s; len = strlen(s); f = true; for(int i = .原创 2021-01-27 11:42:31 · 127 阅读 · 0 评论 -
P1219 [USACO1.5]八皇后 Checker Challenge(C语言)
P1219 [USACO1.5]八皇后 Checker Challenge1.思路1.1对角线的表示首先根据题目的要求,我们可以用一个数组line[13]表示皇后放置的位置 如line[4]=5 则表示第4行第5列放了一个皇后。然后再分别用ud[13],ld[13]表示上,下对角线看上对角线的图,不难发现处于上对角线的值都是相等的则可以用ud[i+j]来表示,其中i表示第几行,j表示第几列。可能还有一点很难理解,为什么ud[i-j]能表示一条对角线,不就是一个单独的坐标吗?其实很容易想明白了原创 2020-08-17 19:50:23 · 2544 阅读 · 2 评论 -
DFS入门级(模板)
DFS最近一直都在写蓝桥杯的题目,其中有许多题目涉及到了搜索(DFS,BFS)等,由于递归过于抽象,所以没能很好的掌握。于是便写下了这篇入门教程来加深对DFS的认识,并且充分理解递归。所谓DFS就是指:优先考虑深度,换句话说就是一条路走到黑,直到无路可走的情况下,才会选择回头,然后重新选择一条路。1.全排列(入门引导)引导题:输入一个数n,输出n的全排列可以先把这个问题形象化如:假如有编号为1,2,3的3张扑克牌和编号为1,2,3的3个盒子。将这3张扑克牌分别放入3个盒子一共有几种不同的放原创 2020-08-16 18:09:58 · 103267 阅读 · 104 评论 -
蓝桥杯省赛真题-抽签
抽签X星球要派出一个5人组成的观察团前往W星。其中:A国最多可以派出4人。B国最多可以派出2人。C国最多可以派出2人。…那么最终派往W星的观察团会有多少种国别的不同组合呢?下面的程序解决了这个问题。数组a[] 中既是每个国家可以派出的最多的名额。程序执行结果为:DEFFFCEFFFCDFFFCDEFFCCFFFCCEFFCCDFFCCDEFBEFFFBDFFFBDEFFBCFFFBCEFFBCDFFBCDEF....(以下省略,总共101行)#inc原创 2020-08-13 17:14:25 · 213 阅读 · 0 评论 -
P1028 数的计算(C语言)
P1028 数的计算1.思路(自己想出来的)直接用递归,分别求每个数的次数如f(1)=1 1就是那个数本身,也要计算在内f(2)=f(1)+1f(3)=f(1)+1f(4)=f(1)+f(2)+1f(5)=f(1)+f(2)+1f(n)=f(1)+…f(n/2)+12.源码//时间复杂度过高 n的n次方#include<stdio.h>int sum(int x){ int result=0; if(x==1) return 1;原创 2020-08-01 07:27:26 · 407 阅读 · 0 评论