算法模板-01背包
摘要:01背包:在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2至Wn,与之相对应的价值为P1,P2至Pn。求背包在可以装下的情况下的最大价值是多少? 1.建立状态:令dp[M][W]为M件物品放入空间为W的背包的最大价值。 2.分析状态转移方程:对每一个物品,仅可以选择放一个进去或者
阅读全文
posted @
2020-04-30 12:11
新望
阅读(135)
推荐(0)
GMP-C/C++(大数库)使用方法
摘要:The GNU Multiple Precision Arithmetic Library(GNU 高精度算数库)是一个用于任意精度算术的免费库,可处理带符号整数,有理数和浮点数。除了运行GMP机器中的可用内存所暗示的精度外,对精度没有实际限制。GMP具有丰富的功能集,并且这些功能具有常规接口。 下
阅读全文
posted @
2020-04-29 16:56
新望
阅读(4516)
推荐(1)
算法模板-容斥原理
摘要:容斥原理:在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。 百度百科
阅读全文
posted @
2020-04-29 16:08
新望
阅读(370)
推荐(0)
算法模板-欧拉函数
摘要:欧拉函数:给定一个正整数n,在小于等于n的数中,与n互质的数的个数。 关于欧拉函数,有以下几个规律: 1.当n为质数时,euler(n)=n-1. 2.当p与q互质时,euler(p*q)=euler(p)*euler(q). 3.当n等于p^k时,p为质数,euler(n)=p^k-p^(k-1)
阅读全文
posted @
2020-04-18 10:27
新望
阅读(265)
推荐(0)
算法模板-素数判断/素数筛法
摘要:素数:仅能被1和它本身整除的数叫做素数,否则是合数。 素数判断:一个数n,将所有小于n大于1的数逐个带入,如果有任意一个能整除,判断是合数,如果都不能,是素数。 优化:一个合数的因子是成对出现的(假设n=i*j;i<j;当我们判断i是n的一个因子时,同时也判断了j是n的一个因子),所以我们不必判断从
阅读全文
posted @
2020-04-18 09:28
新望
阅读(208)
推荐(0)
算法模板-质因数分解
摘要:任何一个整数,都可以分解为一个或者多个质因数的乘积,这样的分解叫做质因数分解。 程序实现的核心是贪心,即用当前最小的质数去判断是该数的因数,是就记录下来。 并且在该数中除去这个质数,直到这个质数不能整除为止,因为我们知道一个合数可以整除一个数,代表他的质因数都可以整除那个数,而他的质因数都比他小,所
阅读全文
posted @
2020-04-15 12:00
新望
阅读(241)
推荐(0)
算法模板-快速幂取模
摘要:普通幂取模: 时间复杂度O(n) 代码: ll general_pow(ll x,ll n,ll mod) { ll res=1; for(int i=0;i<=n;i++) res=res*x%mod; return res; } 快速幂取模:x^n=(x*x)^(n/2) 时间复杂度O(lg(n
阅读全文
posted @
2020-04-12 16:04
新望
阅读(172)
推荐(0)
算法模板-扩展欧几里得算法
摘要:扩展欧几里得算法是欧几里得(又叫辗转相除法)的扩展。除了计算a、b两个整数的最大公约数,此算法还能找到整数x、y(其中一个很可能是负数)为:ax+by=gcd(a,b)的解。 证明: 设x1,y1是方程:ax+by=gcd(a,b)的解 已知:gcd(a,b)=gcd(b,a%b); 设x2,y2是
阅读全文
posted @
2020-04-12 15:49
新望
阅读(114)
推荐(0)