![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
qq_42731393
这个作者很懒,什么都没留下…
展开
-
动态规划入门2
/*给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。 对于S的所有非空连续子序列T,求最大的序列和。 变量条件:N为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。*///方法一 递归,找出递推式 #include<iostream>#include<algorithm>using namespace std;const int MAXN=1000000;int arr[MAXN];//用于记录原创 2021-11-25 19:45:58 · 3354 阅读 · 0 评论 -
动态规划入门
//动态规划是一种优化方法:子问题结果复用,数组记忆化//典型例题 有n级楼梯,有2种爬法,1次1级,或1次2级,问,n级楼梯有多少种爬法?//方法一:递归#include<iostream>using namespace std;int f(int n){ int answer; if(n==1||n==2) answer=n; else{ answer=f(n-1)+f(n-2); }原创 2021-11-25 15:04:07 · 3266 阅读 · 0 评论 -
图论04—拓扑排序
/*拓扑排序用于解决有向图中的顶点先后顺序问题算法思想:依次输出入度为0的顶点,并删除其有向边*/#include<iostream>#include<cstring>#include<queue>#include<cstdio>#include<functional>using namespace std;const int MAXN=500;int inDegree[MAXN];vector<int> gra原创 2021-05-11 17:40:16 · 80 阅读 · 0 评论 -
图论03—最短路径02
/*使用优先队列优化查找最小结点,则查找的时间复杂度为log级别*/#include<iostream>#include<vector>#include<cstring>#include<climits>#include<cstdio>#include<queue>using namespace std;struct Edge{ int to; int length; Edge(int t,int l):t原创 2021-05-10 21:31:39 · 81 阅读 · 0 评论 -
图论03—最短路径01
/*最短路径:源点到其他顶点的最短距离算法:迪杰斯特拉算法算法思想:有两个集合S,T,依次将T集合中的元素按照最小的特性加入S集合,并进行松弛操作。*/#include<iostream>#include<vector>#include<cstring>#include<climits>#include<cstdio>using namespace std;struct Edge{ int to; int length原创 2021-05-10 12:08:50 · 119 阅读 · 0 评论 -
图论02—最小生成树
/*生成树是指保证顶点的连通性的情况下,边尽可能的少,n个顶点的生成树的边数为n-1;最小生成树是指:生成树中权值最小的生成树。算法:克鲁斯卡尔算法算法思想:每次将挑出最小的边,然后若边依附的两个顶点不在同一个集合中,那么就将这两个顶点所在的集合合并。*/#include<iostream>#include<algorithm>using namespace std;const int MAXN=100;int father[MAXN];int height[M原创 2021-04-26 20:22:51 · 150 阅读 · 0 评论 -
图论01—并查集
/*01.并查集是用于查询,合并不相交集合的数据结构02.不相交集合是指两个集合中没有重复的元素03.判断两个元素是否在同个集合中的办法:看这两个元素的根节点是否相同。04.判断集合中的哪个节点是根节点:判断其父节点的值是否和其本身相同。05.查找一个节点的根节点:递归的向上查找。优化:将树进行变宽变矮,从而提高查找效率06.不相交集合合并:先查找根节点,如果不同,则进行合并将矮树作为高树的子树,若树相同,则树高加1。*/#include<iostream>#in原创 2021-04-24 16:51:59 · 103 阅读 · 0 评论 -
Map集合02
#include<iostream>#include<string>#include<cstring>#include<map>using namespace std;/*查找学生信息*/int main(){ int n; cin>>n; getchar();//为什么要吃掉回车?map<string,string> ma; string student; string id; f原创 2021-04-20 19:24:43 · 93 阅读 · 0 评论 -
map集合01
1.map集合描述的是一种键值对关系,特点是根据键找值很方便2.map集合有两类:map和unordered_map其中map的底层是由红黑树实现的,删除,查询,插入的时间复杂度为O(logn),头文件为#include<map>unordered_map的底层由哈希表实现,删除,查询,插入的时间复杂度为O(1),头文件为#include<unordered_map>3.map集合的内置函数:给键赋值(像数组一样),插入,查找,遍历map<string,strin原创 2021-04-20 18:31:03 · 90 阅读 · 0 评论 -
10.2优先队列
1.优先队列:优先队列由二叉堆这种数据结构实现,优先队列中的元素具有优先级,每次对优先级最高的元素进行操作,2.可以进行的操作有访问堆顶元素,删除堆顶元素,插入一个元素。其中头文件是:#include<queue>创建一个优先队列:priority_queue<int> p;访问队头元素:p.top();删除一个元素:p.pop();插入一个元素:p.push(i);3.优先队列用于解决的问题类型:顺序问题以及哈夫曼树。4.如果想每次对优先级最小的数据进行操作,则应原创 2021-04-19 14:11:07 · 132 阅读 · 0 评论