![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
卓越
文章平均质量分 76
随意随缘
动心起念,则意起缘生
展开
-
算法模板:堆,最小生成树(Prim,Kruskal),快速幂
堆堆一般以二叉堆的形式存在,也可以说是一个“优先队列”,堆中数据以一定顺序存放,比如小根堆(根节点小于子节点)堆涉及到的基本操作:上浮:新插入元素时在底,上浮到相应的位置下沉:删除元素时,删除最小元素(根节点),以堆底元素作为临时的root,然后进行下沉调整堆基本模板:堆结构:一个数组,heap[0]来存储堆中元素个数,heap[heap[0]]是堆底元素,heap[heap[0]/2]是堆底元素的父节点int heap[MAXN];上浮:void swim(..原创 2020-09-21 20:48:44 · 501 阅读 · 0 评论 -
算法模板:快速排序,欧拉筛法
快速排序:原理:找到一个基准数,小于它的放一边,大于它的在另一边应用:排序,STL sort模板:void quicksort(int l,int r) { //取左一为基准轴 int i=l,j=r; int k=a[l]; if(i>=j) return; while(i<j) { while(i<j && a[j]>k) j--; if(i<j) {a[i]=a[j];..原创 2020-09-21 20:45:51 · 250 阅读 · 0 评论 -
算法模板:大数乘法,并查集
大数乘法:模拟乘法手算累加:和小学生一样竖式计算,逐位相乘,结果相加(很麻烦)改进:先不算任何进位,只保存每一位结果,最后从右到左相加int result[num1.length+num2.length]; //结果不会比俩数长度加起来还长for(int i=0; i<num1.size(); i++) { for(int j=0; j<num2.size(); j++) { //不考虑进位,先乘了再说 result[i+j+1]..原创 2020-09-21 20:42:26 · 171 阅读 · 1 评论 -
算法模板:动态规划(背包问题)
动态规划:原理:要满足最优子结构和重叠子问题,使用递归式自底向上计算并保存最优解,找到整体最优解与贪心的一些区别:满足贪心一定满足最优子结构,但满足最优子结构不一定满足贪心选择性质,比如背包问题基本模板01背包for(i=0; i<n; i++) { for(j=m; j>w[i]; j--) { //m -> max weight f[j] = max(f[j],f[j-w[i]]+v[i]); }}完全背包..原创 2020-09-21 20:39:35 · 177 阅读 · 0 评论 -
算法模板:贪心
贪心:原理:局部选择最优解,当前选择对后续不产生影响基本思路:① 建立数学模型来描述问题② 分解为若干子问题③ 依序对每一个子问题求最优解(下一个包含上一个的最优解)④ 把所有子问题的局部最优解合并为原问题的一个解活动安排问题会场安排活动:即按活动的结束时间排序,让剩余时间最大化,安排更多的活动代码:bool cmp1(node a, node b){ return a.end < b.end ; //结束时间从小到大排序}so..原创 2020-09-21 20:37:08 · 623 阅读 · 0 评论 -
算法模板:尺取法,前缀和,差分数组
尺取法应用:求一个最小区间原理:通过移动左右两个指针来确认满足要求的最小区间基本模板:while(1) { while( cnt<sum && r<n ){ if( check[r++]==0 ) cnt ++; } if(cnt < sum) break; ans = min(ans,r-l); if( --check[l++]==0 ) cnt --; }前缀和应用:对..原创 2020-09-21 20:31:53 · 204 阅读 · 0 评论