算法
文章平均质量分 75
Infertom
这个作者很懒,什么都没留下…
展开
-
KMP模板
参数:原串和模式串返回值:在原串中模式串的个数可选:单个字符是否可以被重复使用于多个匹配中————————————————————————————————————————————————————————————const int MAXN = 100000 ; char strOri[MAXN+100], strPar[MAXN+100];int nextLink[原创 2015-01-14 14:18:51 · 699 阅读 · 0 评论 -
DP·矩阵加速
题目:hiho第43周/hiho1162 题意:现有1*2的骨牌,求覆盖K*N的方案数。2≤K≤7,1≤N≤100,000,000 方法:DP,用矩阵快速幂加速 DP矩阵加速的基本思想即将一系列状态看成一个向量,转移方程看成一个矩阵,通过向量乘矩阵得出下一系列状态,即当时,可将基向量记为,则转移矩阵为,则,则,而后面的矩阵的幂则可以用快速幂思想快原创 2015-05-06 18:04:18 · 825 阅读 · 0 评论 -
DP·数位DP(3)
题目:HDU3652 题意:求出在给定区间[l, r]中所有包含”13”且能被12整除的数的个数 方法:数位DP,定义状态dfs(intn, int per, int m, bool flag, int flag2),表示到第n位时,前一个数为per,余数为m,flag表示是否受限,flag2表示之前是否已经出现了”13”#include#原创 2015-05-01 10:49:01 · 373 阅读 · 0 评论 -
DP·数位DP(5)
题目:POJ3252 题意:求出给定区间[l, r]中所有二进制表示时0个数不小于1个的数的个数 方法:数位DP定义状态:lldfs(int pos, int zNum, int oNum, bool flag, bool flag2)表示二进制的当前位pos,已有0的个数zNum,1的个数oNum,flag表示是否受限,flag2表示是否为第一位(若为第一位,则枚原创 2015-05-04 19:59:01 · 395 阅读 · 0 评论 -
DP·数位DP(4)
题目:HDU3709 题意:定义以一个数的某一位为中心点,每一位的价值为这一位上的数*距离中心点的距离,若中心点两边的价值之和相同,则此数平和(即将一个数看做一个天平,是否平衡)。求给定区间[l, r]中的平衡的数的个数。 方法:数位DP定义状态:dfs(intpos, int mid, int dif, bool flag),pos为当前的位置,mid表示中心点位原创 2015-05-04 11:16:10 · 387 阅读 · 0 评论 -
DP·数位DP
题目:HDU3555 题意:求区间[1, n]内所有含”49”的数 方法:数位DP,定义状态:dp[n][m]表示第n位(最高位即为第n位)为m的符合要求的数的个数状态转移:第n位为m的状态符合要求的数有两种可能:1若m=4,且n-1位为9,1~n-2位为任何数均可以,即有10^(n-2)个,若n-1为不为9,则第n为没有贡献,即以n-1位可能的数为头的所有满足原创 2015-04-28 17:14:38 · 375 阅读 · 0 评论 -
DP·基础DP
题目:HDU1024 题意:给定n(1 ≤n ≤ 1,000,000)个数(-32768 ≤ num≤ 32767)与m,求m个非相交的区间,使得所有区间内的数的总和最大 方法:DP,定义状态:dp[m][n],表示到第n个数时已经有m个区间时的最大和状态转移:第n个数有m个区间可有两种情况到达,1前n-1个数有m个区间了,再在最后一个区间加上第n个数,2第n-原创 2015-04-27 22:52:37 · 402 阅读 · 0 评论 -
DP·数位DP(2)
题目:CodeForces 55D 题意:若一个数能被其各个位上的数整除,即满足条件。求区间[l, r]内所有满足条件的数 方法:若想要一个数能被其各个数位上的数整除,则此数要能被各个位上的数的LCM整除。而且由于LCM(1~9) = 2520,所以将数对2520取模后,若余数能被LCM整除,则原数也能被LCM整除,因为LCM肯定为2520的一个因子。(期初几个数位原创 2015-04-28 22:31:22 · 328 阅读 · 0 评论 -
基础数学·GCD&LCM
题目:UVA11889 题意:已知两个数A和C,求一个最小的整数B使得LCM(A,B) = C 方法:记GCD(A,B) = K,则A = a * K, B = b * K, C = a * b * K所以B = C / A * K,当K = 1 时取最小可由于此时求得的B = C / A 可能与 A 存在公约数,即假设的K = 1不成立(如(12,36))时原创 2015-04-17 10:45:08 · 844 阅读 · 0 评论 -
背包·分组背包
分组背包,每组最少选择一个题目:hdu3033,neu1537 方法:在普通背包上的基础上增加一条选择物品的路径,即从上一组的最终状态+这一组选择一个物品。//普通背包的选择方式,可保证在枚举当组中物品时至少选择一个if ( bag[i][sum - book[i][j].c] != -1 )bag[i][sum] =max(bag[i][sum], bag[i][原创 2015-04-15 22:55:31 · 425 阅读 · 0 评论 -
背包题目的合集(第一弹)
此为目前刷的题,作为第一弹题集,也可能是最后一弹了。。。________________________________________华丽丽的分割线________________________________________________hdu2602——01背包题意:给出n个物品的花费与价值,与包的容量,求价值最高题解:基础 p原创 2015-01-05 22:05:12 · 639 阅读 · 0 评论 -
算法——背包学习(暂时的总结)
01背包void ZeroToOne(int weight, int value){ for(int i=maxV; i>=weight; i--){ bag[i]= max(bag[i], bag[i-weight]+value); }} 完全背包void Com原创 2015-01-05 22:03:10 · 475 阅读 · 0 评论 -
组合数取模计算模板
1一般组合数计算mod的要求:无有效范围:1————————————————————————————————//一般方法求C(n,m)最后取模。C(62,28)溢出。有效范围1<n,m<=60ll CNormal(int n, int m){ if ( m>n ) return 0; ll ans = 1; for (int i=1; i<=m; i++) { an原创 2015-02-04 14:22:53 · 791 阅读 · 0 评论 -
组合数计算总结
一、 一般组合数计算 利用 的据算公式进行运算,简单明了。利用乘法与除法的同时运行,有效地降低溢出(除法能整除的保证:每i个数中必有一个是i的倍数)。只能对最后的结果进行取模,无法在运算时取模,虽然求取的时候转化为了ans* ans’ * ans’’……的形式,虽然连乘运算可以逐步取模,但如果对ans取模,将无法保证下一步的除法能整除,所以不可取。时间复杂度:O(m) mod的要求原创 2015-02-04 13:40:52 · 2370 阅读 · 0 评论 -
manacher模板
参数:原串返回值:最长回文串长度附:同时记录每一位的最长回文串长度————————————————————————————————————————————const int MAXN = 110000 ;char strOri[MAXN+100];int maxPalindrome[MAXN*2+100];//最长回文//manacher,返回最长的回文原创 2015-01-14 14:40:40 · 308 阅读 · 0 评论 -
DP/记忆化搜索+set
题目:HDU5218 题意:给定一个环的大小N,给定一个大小为M的集合,包含的元素为可一次走的步数。初始环大小为N,全满并从1~N标号,每次从集合中随机选择一个元素,然后走a步,并移除当前走到的位置的前一个环上的点。求所有可能成为最后一个留下的元素原来的编号 方法:DP,set 每次移除一个点后,就将环从当前节点开始重新从1开始标号(即每次走的时候都原创 2015-05-07 13:24:46 · 624 阅读 · 0 评论