摘要:
扩展KMP 写在开头 这里的大多数思路都属于泥土笨笨,感觉这篇真的讲的很好,大家可以去看看 先挖个坑,晚上填好 阅读全文
摘要:
区间DP 什么是区间 DP 区间类动态规划是线性动态规划的扩展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的哪些元素合并而来有很大的关系。令状态$f_{i,j}$表示将下标位置$i$到$j$的所有元素合并能获得的价值的最大值,那么 ,$max(f_{i,k}+f_{k+1,j}+co 阅读全文
摘要:
背包 问题:有n个物品,每个重量为vi,权值为wi,每个物品仅用一次,问在背包容量为W里能装的最大价值 01背包 核心特点:每件物品最多只能用一次 集合条件: 核心:不漏下任何一个 1.只从前i个物品中选 2.总体积$\le$V 属性:Max $f_{i,j}$据上面的假设,意义应该是在前i个物品, 阅读全文
摘要:
KMP算法 前提介绍 KMP算法是一种看模式串在主串中出现次数的优化算法 复杂度为O(n+m) 这个算法理解了不难,不理解只背模板早晚会挂,而且容易忘,建议从头到尾一步一步看完 为了方便描述,我们把S作为子串,T作为模式串,然后下标一定要从1开 设len1为长串,len2为模式串(即短串) 本讲解是 阅读全文
摘要:
矩阵 矩阵的定义: 一个n*m的矩阵可以看作是一个二维数组 设A是$n * m$矩阵,B是 $m * p$矩阵 则C就是$n * p$ 矩阵 并且 \[ \sum _{k=1}^{m} A_{i,k}*B_{k,j} \] 矩阵乘法满足结合律,即$(A*B)*C$ =\(A*(B*C)\) 满足分配 阅读全文
摘要:
搜索 bfs bfs 名字是广度优先搜索 核心思想就是我从一个节点出发,先遍历一遍距离为1的,再遍历距离为2的…… 这个如果看不懂(就直接退役吧)当然还有别的办法: 上例题看代码! 马的遍历 我们先来看题意,就是看你的到达每一格需要的最少步数 那么我们想,我们可以让儿先走一步,然后看看走一步的那些点 阅读全文
摘要:
栈和队列 此处均为用数组模拟(因为懒) 实际上是因为STL里的栈和队列常数太大 ,不如用数组模拟,而且能做的事也比STL多 栈: 先进后出(可以理解成一个坑 int stk[N],tt; skt[++tt]=x;//入栈 tt--;//弹出 if(tt==0) return empty; else 阅读全文
摘要:
哈希算法基础 字符串哈希本质上来说就是把每个不同的子串换成一个整数,然后查询两个字符串是否相同时只需要查明两个字符串的哈希值是否相等就行 hash公式 const int base=10; const int p1=1610612741; const int p2=805306457; char s 阅读全文
摘要:
线段树 一种我琢磨了很长时间才明白的数据结构 核心思想就是把一个序列,分成一个二叉树,叶子节点存的是每个元素,能够快速修改或访问区间中的数值,功能♂强大 线段树主要分为下面几步: push_up操作 void push_up(int p){ tree[p]=tree[lc(p)]+tree[rc(p 阅读全文
摘要:
树形结构 树是数据结构与算法中一种非常重要的结构,是由N个具有层次的结点组成,其具有以下特点: (1)有一个根结点,一般称为root结点 (2)每一个元素称为node (3)除了root结点外,其余结点会被分为n个互不相交的集合,即n个互不相交的子树 树形结构基本名词: (1)结点:node,树形结 阅读全文