随笔分类 -  算法及模板

1 2 下一页

dp之最长上升子序列
摘要:普通做法是O(n^2)下面介绍:最长上升子序列O(nlogn)算法(http://blog.csdn.net/shuangde800/article/details/7474903) 阅读全文

posted @ 2017-07-25 16:55 远搏 阅读(188) 评论(0) 推荐(0)

bellman-ford(可判负权回路+记录路径)
摘要:4 6 11 2 201 3 54 1 -2002 4 44 2 43 4 2 和: 4 6 11 2 21 3 54 1 102 4 44 2 43 4 2 阅读全文

posted @ 2017-05-02 21:11 远搏 阅读(186) 评论(0) 推荐(0)

拓扑排序(dfs)
摘要:int c[N];//c[u]=0表示从来没有访问过;c[u]=1表示已经访问过,并且还递归访问过它的所有子;c[u]=-1表示正在访问。 int topo[N],t; int G[N][N]; bool dfs(int u) { c[u]=-1; for(int v=0;v<n;v++) if(G[u][v]) { if(c[v]<0) retu... 阅读全文

posted @ 2017-05-02 20:55 远搏 阅读(123) 评论(0) 推荐(0)

Dijkstra+优先队列
摘要:/* Dijkstra的算法思想: 在所有没有访问过的结点中选出dis(s,x)值最小的x 对从x出发的所有边(x,y),更新 dis(s,y)=min(dis(s,y),dis(s,x)+dis(x,y)) */ #include #include #include #include using namespace std; const int Ni = 10000; const in... 阅读全文

posted @ 2017-05-02 20:17 远搏 阅读(194) 评论(0) 推荐(0)

求逆元
摘要:扩展欧几里得: 注意除数需要与mod互质 阅读全文

posted @ 2017-04-27 18:54 远搏 阅读(130) 评论(0) 推荐(0)

二分图的最大匹配
摘要:3个重要结论: 最小点覆盖数: 最小覆盖要求用最少的点(X集合或Y集合的都行)让每条边都至少和其中一个点关联。可以证明:最少的点(即覆盖数)=最大匹配数最小路径覆盖=最小路径覆盖=|N|-最大匹配数用尽量少的不相交简单路径覆盖有向无环图G的所有结点。解决此类问题可以建立一个二分图模型。把所有顶点i拆 阅读全文

posted @ 2017-04-26 20:31 远搏 阅读(197) 评论(0) 推荐(0)

几何多边形面积交模板
摘要:求连个多边形相交的面积 阅读全文

posted @ 2017-04-19 16:52 远搏 阅读(174) 评论(0) 推荐(0)

扩展欧几里得
摘要:欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。 这里给出一个证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一 阅读全文

posted @ 2017-03-17 20:21 远搏 阅读(141) 评论(0) 推荐(0)

利用栈的逆波兰表达式
摘要:首先维护的是两个栈,我们这里暂且称为S1和S2,S1中的结果最后存的就是逆波兰表达式,S2中将用于暂时存放运算符并且在最终形成逆波兰表达式的时候,该栈是会清空的。下面我们看看怎样具体的形成逆波兰表达式。 在此首先定义一下运算符的优先级关系,从小到达排序,相同优先级没有用逗号隔开:(,+-,*\,负号 阅读全文

posted @ 2017-03-10 20:46 远搏 阅读(168) 评论(0) 推荐(0)

快速排序
摘要:#include #include #include using namespace std; int a[10]={2,1,5,9,8,7,6,4,3,10}; void Swap(int i,int j) { int x=a[i]; a[i]=a[j]; a[j]=x; return ; } int Partition(int p,int r) { ... 阅读全文

posted @ 2017-02-27 20:48 远搏 阅读(96) 评论(0) 推荐(0)

优先队列
摘要:C++ STL 优先队列详解 一.解释: 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序,每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储。 例如,将元素5 3 2 4 6依次push到优先队列中,规定顺序为从大到小并输出 阅读全文

posted @ 2017-02-05 21:30 远搏 阅读(203) 评论(0) 推荐(0)

dfs枚举
摘要:深度优先搜索(DFS,Depth-First Search)是搜索手段之一。它从某个状态开始,不断的转移状态知道无法转移,然后退回到前一步的状态,继续转移到其他状态,如此不断重复,直到找到最终的解。 问题给定整数a1,a2...an,判断是否可以从中选出若干数,使它们的和恰好为k。 1<=n<=20 阅读全文

posted @ 2016-11-09 20:37 远搏 阅读(930) 评论(0) 推荐(0)

kmp算法
摘要:int next[N]; char S[N], T[N]; int slen, tlen; void getNext() { int j, k; j = 0; k = -1; next[0] = -1; while(j < tlen) if(k == -1 || T[j] == T[k]) next 阅读全文

posted @ 2016-10-05 08:24 远搏 阅读(158) 评论(0) 推荐(0)

算法归并排序 递归篇
摘要:void merge(int l,int r){ int left[N],right[N]; int mid=(l+r)/2; int m=0,n=0; for(int i=l;i<=mid;i++) //左半部分 left[m++]=a[i]; for(int i=mid+1;i<=r;i++) 阅读全文

posted @ 2016-09-28 19:57 远搏 阅读(190) 评论(0) 推荐(0)

欧拉函数 朴素算法
摘要:int Eular(int n){ int s=n; for(int i=2;i*i<=n;i++){ if(n%i==0) s=s/i*(i-1); while(n%i==0) n/=i; } if(n>1) s=s/n*(n-1); return s;} 阅读全文

posted @ 2016-09-09 16:37 远搏 阅读(148) 评论(0) 推荐(0)

sg函数的应用
摘要:刚刚接触到sg函数突然感觉到原来可以这么好用,sg函数应该算是博弈论中比较经典的东西了。下面来说说sg函数: 从网上搜集资料终于能看懂了下面解释来自http://www.cnblogs.com/cj695/archive/2012/07/31/2617378.html,自己写不出来收藏了大神的思想。 阅读全文

posted @ 2016-08-05 11:35 远搏 阅读(632) 评论(0) 推荐(0)

二分查找
摘要:int s(int l,int r,int k)//二分查找 76 { 77 int mid; 78 while(l>1; 81 if(kx[mid]) l=mid+1; 83 else return mid; 84 } 85 return -1; 86 } 阅读全文

posted @ 2016-07-29 11:21 远搏 阅读(103) 评论(0) 推荐(0)

快速幂
摘要:快速幂,a的b次方; 阅读全文

posted @ 2016-07-29 11:17 远搏 阅读(124) 评论(0) 推荐(0)

筛选法素数打表
摘要:筛选法素数打表 阅读全文

posted @ 2016-07-29 11:12 远搏 阅读(134) 评论(0) 推荐(0)

STL中一些函数的应用
摘要:1.nth_element():找到第几大的数。用法:nth_element(a,a+k,a+n),返回一个数组a中第k大的数,时间复杂度比较小,头文件#include <algorithm>。 2.lower_bound()。函数lower_bound()在first和last中的前闭后开区间进行 阅读全文

posted @ 2016-05-02 10:42 远搏 阅读(249) 评论(0) 推荐(0)

1 2 下一页

导航