递归
文章平均质量分 70
tweatherm
这个作者很懒,什么都没留下…
展开
-
tarjan算法
本文只给最直接的结论而没有证明,想看详细教程的可以退出了!预备知识:有向图:图中任意两个节点的连边是有方向的。强连通:两个节点u,v。如果能在图中找出一条路劲从u到v,也能找出一条从v到u的路径,则称这两个节点是强连通的。强连通图:图中任意两个节点之间都是强连通的。极大强连通子图:往这个子图中加任意一个点都会使之不是强连通图,那么这个子图就是极大连通子图,也称强连通分量改图的强连通分量有(1,2,3,4), (6), (5)。tarjan算法旨在找出有向图的强连通分量。我们确立两个数组d原创 2021-05-10 20:26:08 · 209 阅读 · 0 评论 -
线段树 + lazy标记
超级基础的讲解!!!!我先将如何通过线段树解决区间最大值问题来表示一个线段树线段树的核心思想时通过一个点来代表一个区间的信息,如下图(圆圈里面代表的时序号,下面是区间)我们将序号存入一维数组中,然后用序号代表下面区间的信息。将区间进行二分分为左孩子和右孩子。这些序号有一点规律,一个点的序号是rt,那么左孩子的序号是2rt,右孩子的序号是2rt + 1。首先来建树,建树是利用递归的思想,建左数,再建右树,再用左树和右树的信息建立当前节点//序号为rt并且代表区间l到rvoid bulid(i原创 2021-04-08 19:53:07 · 859 阅读 · 2 评论 -
4117:简单的整数划分问题
递归思想,将问题简单化,对于整数n,选取不大于n的数m作为一个因子,然后再数n-m中选取不大于m的数作为因子,一直递归下去。#include<iostream>using namespace std;int sum = 0;void Find(int n,int m){ if(n == 0)//n>=i的n-i会逐渐到达0,这就是临界条件 { sum +=1;//每找到一个sum加1 return ; } for(int i = m; i >= 1;.原创 2020-12-12 14:42:03 · 133 阅读 · 0 评论 -
2787:算24
递归求解,n个数字中选取两个数字进行四则运算,然后替代这两个数字变成n-1个数字,继续在n-1个数字中选取两个数字运算,剩下n-2个数字…,直到n=1时判断最后``这个数字是否为24就行了;#include<iostream>#include<cmath> using namespace std;double a[5];#define EPS 1e-6//浮点数运算不能用==,必须采用精度 bool Iszero(double x)//是否为0 { return.原创 2020-12-12 11:30:48 · 138 阅读 · 1 评论 -
4017:爬楼梯
直接看代码:#include<iostream>#include<cstring>#include<cmath>#include<cstdlib> using namespace std;int apple(int m, int n){ if(n > m) return apple(m,m); if(m == 0) return 1;//(m - n) >= 0 ; if(n == 0) return 0;//临界条件,注意:.原创 2020-12-09 17:43:22 · 96 阅读 · 0 评论 -
4017:爬楼梯
4017:爬楼梯(递归解答)递归的思想是将一个问题分解成类似一个个的子问题,在题目中我们假设走出第一步,第一步可能走两阶,也可能是一阶,那么n阶台阶的种数就是剩下的n-1阶的种数加上n-2阶台阶的种数,同理n-1阶台阶的数量就是n-2阶台阶的种数加上n-3,由此类推;#include<iostream>#include<cstring>#include<cmath>#include<cstdlib> using namespace std;in原创 2020-12-08 19:30:13 · 138 阅读 · 0 评论