算法笔记
qq_46345701
这个作者很懒,什么都没留下…
展开
-
区间dp
区间dp 核心思路 区间dp,利用分治的思想,在区间上进行动态规划,分成小区间来解决,再通过合并小区间来得到整个大区间的解。 板子题 石子合并1:有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1]。问安排怎样的合并顺序,能够使得总合并代价达到最小。 题目链接 解题思路: 状态转移方程: dp[i][end]=min(dp[i][end],dp[i][j]+dp[j+1][end]+sum[end]-sum[i-1]); #原创 2020-06-02 23:12:25 · 149 阅读 · 0 评论 -
扩展欧几里得算法
扩展欧几里得算法算法的背景算法的基本应用算法的code模板题 算法的背景 扩展欧几里得算法是欧几里得算法(又叫辗转相除法即给予整数a,b求其最大公约数)的扩展。而扩欧算法还能找到整数x,y使得ax + by = gcd(a,b)。 算法的基本应用 求解不定方程:求解不定整数方程ax+by = c 1.该方程有解的充要条件为:c%gcd(a,b)=0。 2.若有解,可利用扩欧算法求出其特解(X0,Y0)。 3. 若(X0,Y0)是不定整数方程ax+by = c的一组解,则不定方程大的特解可表示为(X0+ k原创 2020-05-26 15:21:21 · 255 阅读 · 0 评论 -
tire树
tire树 基本原理 字典树:一种树形结构,典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串)。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。其基本操作有:查找、插入和删除,删除操作比较少见。 基本操作 1.insert,插入一个单词 void insert(string s) { int l=s.size(); int rt=0; for(int i=0;i<l;i++) { int p=s[i]-'a';原创 2020-05-16 16:57:36 · 306 阅读 · 0 评论 -
kmp算法
kmp算法算法的目的算法的思想模板题HDU 1711 Number SequenceHDU 1686 Oulipo 算法的目的 kmp算法:KMP算法是一种改进的字符串匹配算法,利用匹配失败后的信息,尽可能地减少模式串与主串的匹配次数以达到快速匹配的目的。 例如:在主串t中寻找模式串w出现的位置,若用暴力的算法要对主串中的每个位置对w进行匹配,故时间复杂度为o(mn),而在KMP算法中,在匹配失...原创 2020-05-07 15:07:56 · 155 阅读 · 0 评论 -
dijkstra算法堆优化
dijkstra算法堆优化 dijkstra算法:每次选一个点,更新邻点,循环n-1次。 在实现dj算法的过程中,我们需要有存图结构(邻接表或邻接矩阵),时间复杂度为o(n2),在数量级较大的题目中显然不满足要求,这时就需考虑dijkstra算法的优化。 堆优化:优化dijkstra算法从头至尾的扫描的过程,使用小根堆,利用优先队列来维护查找并更新最小距离的点。 代码如下: #include<...原创 2020-05-05 14:23:07 · 785 阅读 · 0 评论