02 2018 档案

摘要:说明 KMP算法看懂了觉得特别简单,思路很简单,看不懂之前,查各种资料,看的稀里糊涂,即使网上最简单的解释,依然看的稀里糊涂。 我花了半天时间,争取用最短的篇幅大致搞明白这玩意到底是啥。 这里不扯概念,只讲算法过程和代码理解: KMP算法求解什么类型问题 字符串匹配。给你两个字符串,寻找其中一个字符 阅读全文
posted @ 2018-02-05 08:47 reminito 阅读(203) 评论(0) 推荐(0)
摘要:我们首先来看一下什么是前向星. 前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了. 用len[i]来记录所有以i为起点的边在数组中的存储长度. 用head 阅读全文
posted @ 2018-02-04 16:18 reminito 阅读(117) 评论(0) 推荐(0)
摘要:以下以求a的b次方来介绍 把b转换成二进制数 该二进制数第i位的权为 例如 例如 11的二进制是1011 11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1 因此,我们将a¹¹转化为算 对于 令A[0]=a^(2^0)*1 A[1]=a^(2^1)*1 A[2]=a^(2^2)*0 A[3 阅读全文
posted @ 2018-02-01 16:38 reminito 阅读(257) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1950 最长上升子序列(LIS)的典型变形,熟悉的n^2的动归会超时。LIS问题可以优化为nlogn的算法。 定义d[k]:长度为k的上升子序列的最末元素,若有多个长度为k的上升子序列,则记录最小的那个最末元素。 阅读全文
posted @ 2018-02-01 15:03 reminito 阅读(131) 评论(0) 推荐(0)
摘要:1 #include 2 using namespace std; 3 4 5 /*初始化的细节问题 我们看到的求最优解的背包问题题目中,事实上有两种不太相同的问法。 6 7 8 有的题目要求“恰好装满背包”时的最优解,有的题目则并没有要求必须把背包装满。一种区别这两种问法的实现方法是在初始化的时候有所不同。 9 如果是第一种问法,要求恰好装满背包,那么... 阅读全文
posted @ 2018-02-01 13:01 reminito 阅读(102) 评论(0) 推荐(0)
摘要:1 #include 2 3 #define maxn 100007 4 using namespace std; 5 6 int Sum[maxn>1; 20 21 Build(l,m,rt>1; 52 Pushdown(rt,m-l+1,r-m); 53 54 if(L>1; 71 Pushdown(rt,m-l+1,r-m); 72 7... 阅读全文
posted @ 2018-02-01 12:59 reminito 阅读(83) 评论(0) 推荐(0)
摘要:1 #include 2 using namespace std; 3 //https://www.cnblogs.com/hsd-/p/6139376.html 4 int a[MAXN],tree[MAXN]; 5 //低位一 6 int lowbit(int t) 7 { 8 return t&(-t); 9 } 10 11 //区间更新 12 void upd... 阅读全文
posted @ 2018-02-01 12:58 reminito 阅读(86) 评论(0) 推荐(0)