摘要:
1.背景最大连续子段和是一类问题,即求一个序列最大连续子序列的和。问:给出n个元素分别为A1,A2,...,An,求出其最大连续子段和。2.求解思路2.1 动态规划:设A[ i ]为该序列第 i 个元素,C[ i ]存放前 i 个序列的最大子段和,那么C[ i ]有两... 阅读全文
摘要:
以下笔记整理自:《算法设计编程实验》吴永辉1.结论1.1 莫比乌斯函数:莫比乌斯函数可以看做一个辅助函数,它在莫比乌斯反演公式中用到。1.2 莫比乌斯反演:莫比乌斯反演公式是 根据和函数来求算数函数的一个公式。1.3 算数函数:所有在正整数上运算的函数称为算数函数。1... 阅读全文
摘要:
原题链接:POJ1284题意简述:定义一个概念原根(primitive root),给出p,求出p为模的原根数量。解题思路: 原根是数论中的一个概念,有关定义和证明请看原根的性质以及如何求原根代码实例:#includeconst int maxn = 1e5+10;i... 阅读全文
摘要:
题目链接:POJ2048题意简述:给出一个整数N,求出 i 从1到 N 的所有 GCD(i,n) 的和。解题思路:将GCD(i,N)分为两个部分,即GCD(i,N)= 1与!=1。GCD(i,N) = 1:从1到N所有与N互素的数有 phi(N) 个,而如果数 i 与... 阅读全文
摘要:
原题链接:题意简述:黑方只有一个棋子,将。红方有四种棋子,现在红方已走一步,轮到黑方走了,请问黑方是否必败。解题思路:黑方最多有四种走法,分别判断这四个位置上黑方是否会输,如果全都会输,则必败。错误报告:这题需要注意不能用%c或者getchar()读入,因为数据似乎不... 阅读全文
摘要:
原题链接:POJ1014题意简述:给出六种价值分别为1,2,3,4,5,6的石头的个数,求是否可以公平的分成两份价值相同的石头。其中石头不可分割。解题思路:就是说求是否可以分成两份,价值相同,可以使用幂级数型生成函数来求多重集的组合计数。详情步骤见吴永辉老师的《算法设... 阅读全文
摘要:
原题链接:HDOJ5015题意简述:给定矩阵每个元素计算公式,求下标为(m,m)的元素的值。解题思路:刚开始想着递推求出整个矩阵,后来我哭了。m 可达1e9,要化简到 lg 级别才能不超时,这时我隐约想到用转移矩阵加快速幂做了,根据《算法竞赛进阶指南》P151页所述,... 阅读全文
摘要:
1.背景1.1 算法简介:M.O.Rabin和R.A.Karp发明了一种基于散列的字符串查找算法。我们只需要计算模式串的散列函数,然后利用相同的散列函数计算文本中所有可能的M个字符的子字符串散列值并寻找匹配。如果找到了一个散列值和模式字符串相同的子字符串,再继续验证是... 阅读全文
摘要:
题意:给定整数N,求1const int maxn = 1e7+10;int primes[maxn/10],v[maxn];long long phi[maxn],sum[maxn];int main(){ int cnt = 0; phi[1] = 1; for(... 阅读全文
摘要:
简介:Miller_Rabin法是一种简便的素数测试方法,一般用于测试大数是否为素数。Miller_Rabin测试原理:如果n是素数,且与a互质,则 。(1)证明:请参考费马小定理证明方法。思路:依据上述原理,我们可以不断选取与 n 互质的 a ,如果上式(1)都成立... 阅读全文