自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 收藏
  • 关注

转载 Bellman-Ford SPFA算法

适用范围单源最短路(可判负圈).原理Bellman-Ford算法核心思想:动态规划.d[i]的定义为起点s到第i个点的最短距离.刚开始d[i]数组初始化为INF,d[s]=0.然后遍历所有的边,把所有能更新的点更新一遍,能更新的点判定条件为d[to]>d[from]+w(边权),能更新则更新为d[to]=d[from]+w.这种更新方法最多更新V-1次,因为更新n次就能...

2019-09-08 19:31:00 124

转载 排序算法总结

1.归并排序原理整体思想是把待排序的序列从中间分成两半,分别排序之后利用两个有序的序列合成一个有序的序列.按照这个思想递归下去即可.复杂度O(nlogn).代码 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 typedef unsigned long long ULL; 5 t...

2019-09-06 21:18:00 116

转载 Raising Modulo Numbers POJ 1995(快速幂模板)

原题题目链接题目分析快速幂模板题,依题意套个求模快速幂,然后答案边加边模即可.代码 1 #include <cstdio> 2 #include <cstdlib> 3 #include <iostream> 4 #include <algorithm> 5 #include <utility&...

2019-09-02 09:01:00 123

转载 Pseudoprime numbers POJ 3641(快速幂)

原题题目链接题目分析依题意要先检测p是否为素数,这个可以用埃筛筛出1-sqrt(1e9)的素数,然后判定一下p是否能被这些数整除,不能的话就是素数,否则则为合数.至于a的p次方直接套个快速幂就行了.代码 1 #include <cstdio> 2 #include <cstdlib> 3 #include <iostream&...

2019-09-02 08:58:00 91

转载 Semi-prime H-numbers POJ 3292(素数筛)

原题题目链接题目分析由题意可知,我们要做的第一步就是把H-prime筛出来,仔细观察可以发现,如果i是H-prime,则i*i+4*k*i(k=0,1,2,3...)也是H-prime,这里为了方便筛可以把原数x表示为x/4.筛出H-prime后就暴力处理出H-composites(记得去重).最后排一下序,询问的话直接lower_bound查找就行了.代码 1 ...

2019-09-02 08:44:00 89

转载 X-factor Chains POJ 3421(质因数分解+组合数学)

原题题目链接题目分析依题意可以知道,X每次只分解出一个质因子即可得到最长的链.像20=22*5=(2*5,5,1)就是20最长因子链.因此最长因子链的长度等于质因子的幂的和.最长因子链的组合方法由组合数学可知有(质因子的幂的和的全排列)/(每个质因子的幂的全排列)种.由题目数据可知用组合数学求解的过程中并不会爆longlong,因此不需要额外处理.代码 1 #in...

2019-09-01 10:56:00 138

转载 Prime Path POJ 3126(最短路--非正解)

原题题目链接题目分析按题意在本地用埃氏筛跑了一下符合条件的所有素数,发现只有1000多个.因为题目数据不大,最多100个样例,感觉可以按照题意生成边(从一个素数转化到另一个素数),然后每次询问直接跑一次dijkstra最短路即可.代码 1 #include <iostream> 2 #include <algorithm> 3 #i...

2019-09-01 10:37:00 130

转载 Dead Fraction POJ 1930(数学)

原题题目链接题目分析无限循环小数化分数.把小数用分数表示,后面等比数列可以用求和公式化简,最后可以总结出一个通用公式(可以百度),这里不细讲.需要注意一下,题目没有明确说明循环部分从哪开始,因此需要枚举循环部分,找到分母最小的输出即可.代码 1 #include <iostream> 2 #include <algorithm> 3...

2019-08-31 10:19:00 122

转载 GCD & LCM Inverse POJ 2429(Pollard Rho质因数分解)

原题题目链接题目分析这道题用Pollard Rho算法不能交G++,会RE!!!先说一下整体思路,gcd指gcd(a,b),lcm指lcm(a,b).a=x*gcd,b=y*gcd,则x,y互质且有x*y=lcm/gcd,要使a+b最小,也就是x+y最小.这里可以看出我们要做的就是分解lcm/gcd的质因子,然后枚举找出最小的x+y,最后输出a*x,a*y.这里还需要注意一下...

2019-08-31 09:24:00 93

转载 Strange Way to Express Integers POJ 2891(中国剩余定理扩展)

原题题目链接题目分析题意很明确,这里的模数是不互质的,因此不能直接套中国剩余定理.这里稍微讲一下中国剩余定理的扩展,假设前i个方程的特解为ans(i),通解为x(i)=ans(i)+k*lcm(前i个模数).把x(i)代入到第i+1个方程,用扩展欧几里得定理求解k=k0,ans(i+1)=ans(i)+k0*lcm(前i个模数),则x(i+1)=ans(i+1)+lcm(前i...

2019-08-31 09:06:00 94

转载 Biorhythms POJ 1006(中国剩余定理)

原题题目链接题目分析由题可知要求解一下方程组(x+d)≡p(mod23)(x+d)≡e(mod28)(x+d)≡i(mod33)很明显23 28 33互质,因此这道题只需要用中国剩余定理的结论求出ans-x+d,最后ans-d之后用ans=(ans%lcm(23,28,33)+lcm(23,28,33))lcm(23,28,33)取一下最小正解即可,这里要注意...

2019-08-31 08:56:00 118

转载 无限循环小数化分数

结论先举个例子:设小数x=0.316459665766576657...下划线部分为小数后不循环部分,记a=316459,位数m=6,加深部分为小数后循环部分,记b=6657,位数n=4.则分数为(a*10n+b-a)/10m(10n-1),最后约分即可.原理把先小数用分数表示.x=a/10m+b/10m+n+b/10m+2n+b/10m+3n.....化简一下x=1/10m...

2019-08-30 22:17:00 318

转载 关于约数,余数的算法

欧几里得算法-gcdgcd(a,b)=gcd(b,a%b),其中a为整数,b是不为0的整数.证明:如果a<b,a%b=a,明显有,gcd(a,b)=gcd(b,a).如果a>=b,设a=k*b+r.设d为a,b的任意公因数,因为d|a,d|b,所以d|(a-k*b),因此d也是b和a%b的公因数,反过来亦成立,因此a和b公因数集合和b和a%b的公因数集合相同,...

2019-08-29 20:26:00 569

转载 Pollard Rho算法

原理Pollard Rho算法是一个非常玄学的算法(我个人还不是很懂其原理),作用是分解出一个数的非平凡因子(除1和它本身),通常作用于对大数的质因数分解.期望复杂度为O(n1/4).总体来说运行效果还是相当不错的.算法核心:y=x,x=x*x+c.其中x,y初值是随机生成的,c也是随机生成的常数,假设算法求的是n的因子,最后要判断的是g=gcd(abs(y-x),n),如果g大...

2019-08-28 20:11:00 1672

转载 Miller-Rabin素性测试算法

原理由费马小定理可知,若p为质数,对于任意与p互质的整数a,有ap-1≡1(modp),假设我们要测试的数是x,然后在1到p-1内随机生成一个数作为底数a,然后测试它是否符合费马小定理,如果不符合则一定不是素数,符合则有可能是素数.单纯用费马小定理检验素数出错率很高(指满足费马小定理又不是素数的数-这些数称为Carmichael数,也称弱可能素数),因此需要一个更强的检定方法....

2019-08-28 19:15:00 410

转载 数论基础知识

欧拉函数定义:φ(x)为1至x中与x互质的数的个数.φ(x)=x*∏(p为x的所有质因子)(1-1/p)简单说明一下,这其实是利用了容斥原理.假设x只有两个不同的质因子p,q,1至x中p的倍数有x/p个,q的倍数有x/q个,把这些数去掉之后,我们也许会重复去掉一些小于x既是p的倍数又是q的倍数的数,这时候就得加回来,于是有φ(x)=x-x/p-x/q+x/p*q.化简一下,可...

2019-08-27 21:34:00 351

转载 Out of Hay POJ 2395(最小生成树)

原题题目链接题目分析第一眼可能看不出是最小生成树,但仔细想想其实题目所要求的就符合最小生成树的性质.因此只需要用prim算出最小生成树,在求的过程中记录最小生成树中边的最大值即可.代码 1 #include <iostream> 2 #include <algorithm> 3 #include <utility> ...

2019-08-27 17:12:00 100

转载 Bad Cowtractors POJ 2377(最小生成树)

原题题目链接题目分析题目看似要求最大生成树,其实不然,输入时把所有边乘个-1,在求出来的最小生成树其实就是最大生成树了,只需要注意一下有可能无法生成连接所有点的树,这时候要输出-1.代码 1 #include <iostream> 2 #include <algorithm> 3 #include <utility>...

2019-08-27 16:54:00 96

转载 Agri-Net POJ 1258(最小生成树模板)

原题题目链接题目分析比较明显的最小生成树模板题,题目给的输入是邻接矩阵,处理一下用prim算法就可以算出最小生成树了.代码 1 #include <iostream> 2 #include <algorithm> 3 #include <utility> 4 #include <cstdio> 5 #...

2019-08-27 16:48:00 158

转载 Roadblocks POJ 3255(次短路)

原题题目链接题目分析给无向图,求次短路.相对于第k短路而言次短路还是好求的,只需要在跑dijkstra的过程中顺便记录次短路就行了.代码 1 #include <cstdio> 2 #include <cstdlib> 3 #include <iostream> 4 #include <algorithm&gt...

2019-08-27 16:35:00 91

转载 Silver Cow Party POJ 3268(最短路)

原题题目链接题目分析了解题意后会发现跑两次最短路就能解决问题了,首先考虑奶牛们回家时的路径,其实只要从聚餐点跑一次最短路,记为dis2[],而考虑奶牛们出发时的最短路,只需要把所有边反置一下,再从聚餐点跑一遍最短路,记为dis[],最后只需要找出牛i使得dis[i]+dis2[i]的值最小即为答案.普通的最短路可以用dijkstra跑,复杂度更低.代码 1 #i...

2019-08-27 15:15:00 113

转载 Wormholes POJ 3259(负回路)

原题题目链接题目分析题目要求判断是否存在一条回路,使得回路的距离之和为负数,其实就是图中是否存在负圈,因此可以用bellman来判负圈,如果bellman更新了n次则证明出现负圈,因为n个点构成的图最多只能有由n-1条边构成的最短路.bellman跑了n次则证明存在n条边构成的最短路.代码 1 #include <iostream> 2 #incl...

2019-08-27 15:05:00 129

转载 Six Degrees of Cowvin Bacon POJ 2139(最短路)

原题题目链接题目分析最短路问题,题目要求与其他牛平均最小分离度,事实上就是先求出这头牛到其他所有牛的最短距离之和在求个平均值.题目所给的一群牛上演一个电影其实就是这群牛之间互相存在一条长度为1的边.由于题目要求任意两点的最短路,所以选用Floyd算法来实现.最后找出最短距离之和ans后,ans×100/n-1就是答案了.代码 1 #include <iost...

2019-08-27 14:49:00 69

转载 Find them, Catch them POJ 1703(并查集)

原题题目链接题目分析并查集经典用法,是维护信息的并查集.由于只有两个帮派,那对于每个人需要给它创建两条信息,属于1帮派和属于2帮派.这两条信息是相互矛盾的.当得到一条信息,a和b不是同伙的时候,只需要合并a是1帮派的信息和b是2帮派的信息以及a是2帮派的信息和b是1帮派的信息即可.这道题保证信息不会矛盾,因此只需要合并就行了,最后问a和b是不是同伙,只需要查询a是1帮派的信息...

2019-08-27 14:28:00 63

转载 Wireless Network POJ 2236(简单并查集)

原题题目链接题目分析比较明显的并查集题目,先用一个标记数组表示电脑的修复状态,每当修复一个电脑,就用标记数组标记一下,然后遍历一下所有电脑,如果遍历的电脑已被修复且在该电脑连接距离范围内,就合并这两个电脑.查询的话就是常规的并查集查询操作.代码 1 #include <iostream> 2 #include <algorithm>...

2019-08-27 14:19:00 84

转载 Moo University - Financial Aid POJ 2010(枚举)

原题题目链接题目分析题目要求取中位数,我们可以枚举以每个牛的分数作为中位数,然后选出最省钱的方案,最后只需要看花钱数不超过F中的最高的中位数分数即可.说一下具体实现,先对所有牛按分数从小到大排序,选出最省钱的方案可以用优先队列来选,设half=n/2,当优先队列的牛超过half个的时候就把一个花费最多的弹出去,这样从小到大遍历一遍就可以记录分数比中位数小的那些牛的花费,记为l...

2019-08-27 14:09:00 83

转载 Sunscreen POJ 3614(贪心)

原题题目链接题目分析贪心题,想一下就会发现对于一种防晒乳,应该优先给那些最大SPF等级较低的牛用.因为他们能用的防晒乳更少.实现的话只需要把防晒乳的SPF等级按小到大排序,然后没遍历一种防晒乳就把能用这瓶防晒乳的牛全部加入一个优先队列中,优先队列取出最大SPF等级最小的牛即可.代码 1 #include <iostream> 2 #include ...

2019-08-27 13:12:00 94

转载 Cow Exhibition POJ 2184(01背包dp)

原题题目链接题目分析明显的01背包,但还是由细节需要处理,设置dp[i][j]=前i头牛中选的TF为j时最大的TS值,由于TF可能为负数因此要加一个基数使其在大于等于零,dp初始化为-1,dp[0][0]=0.更新的时候dp[i][j]=max(dp[i-1][j-f[i]]+s[i],dp[i-1][j]).观察这个dp的更新可以发现能状态压缩,当f[i]>=0时,j...

2019-08-26 22:07:00 148

转载 Space Elevator POJ 2392(多重背包dp)

原题题目链接题目分析多重背包题,在放入的时候需要按a的大小排序.定义dp[i][j]为前i个积木凑成j高度,第i个物品最多剩下多少,然后j从0遍历到a[i],dp初始化为-1,dp[0][0]=0.更新方式跟多重背包完全一样,if(dp[i-1][j]!=-1) dp[i][j]=c[i];else if(j>=h[i]&&dp[i][j-h[i]]&g...

2019-08-26 19:28:00 87

转载 Jury Compromise POJ 1015(01背包dp)

原题题目链接题目分析有点难的dp,首先可以这样定义dp[j][k],选了j个人,它们的p[i]-d[i]的和为k,此时的最大p[i]+d[i]的值,由于p[i]-d[i]的值可能为负,所以必须处理一下,也就是让k的值加上m*20(也就是设k=m*20为0),就可以保证k的值为非负整数.这个dp初始化为-1,就是当选j个人,它们的p[i]-d[i]无法凑成k时,dp[j][k]...

2019-08-26 15:58:00 88

转载 Making the Grade POJ 3666(dp)

原题题目链接题目分析有点难的dp,首先考虑一下对于第i个山坡,要使单调,不是把它改成跟上一个相等就是把它改成跟下一个相等,因此改完后的值肯定是原序列的一个值,首先考虑递增,先把原序列按从小到大排个序,把它当为b[i],然后对于原序列的每个数,考虑将它变为b[i]中的其中一个使得其花费最小,因此可以这样设置dp,dp[i][j]表示当前要改变的是第i个值,把它变为b[j]所需要...

2019-08-26 10:01:00 92

转载 Bridging signals POJ 1631(最长递增子序列dp)

原题题目链接题目分析由题目知,如果能求出连接点的最长递增子序列,则可以把连接不在该序列中的点的线全部剪掉.而维护最长递增子序列可以用dp来做,考虑到相同长度的递增子序列末尾数字越小越好,可以这样定义dp,dp[i]长度为i的递增子序列的最小末尾值,初始化为INF,由于这个dp具有有序性,因此可以用二分来加快更新,每次遍历到值num[i],只需二分找出大于等于num[i]的更新...

2019-08-25 19:09:00 99

转载 Wooden Sticks POJ 1065(简单dp)

原题题目链接题目分析题意很明确,就是要维护单调递增的序列,最后看有多少种单调序列即可,设定一个dp数组,cnt表示数组大小,初始化为0,然后把所有木头从小到大排个序,当遍历到木头i时,如果dp数组里有比木头i还小的,就代替它,否则就dp[cnt++]=木头i,最后cnt就是答案.代码 1 #include <iostream> 2 #include...

2019-08-25 16:36:00 149

转载 Dollar Dayz POJ 3181(完全背包)

原题题目链接题目分析完全背包题,不过需要状压和处理大数,首先定义dp[i][j]为用前i种货币(从1-k),凑出j价格的方案数,dp初始化为0,然后更新有两个方向,第一种显然dp[i][j]+=dp[i-1][j],第二种dp[i][j]+=dp[i-1][j-i]+dp[i-1][j-2i]+dp[i-1][j-3i]....直到j-ki<0为止,第二种更新方向想一下...

2019-08-25 14:25:00 78

转载 Ant Counting POJ 3046(计数dp)

原题题目链接题目分析计数dp题,感觉其实也可以用组合数学做,但我太菜了,推不出通用公式.dp可以定义dp[i][j]为前i种选j个蚂蚁有多少种选法,然后递推公式如下,其中c[i]表示第i种的数量,dp[i][j]=Σ(min(j,c[i]),k=0)dp[i-1][j-k].可以化简一下,dp[i][j]=∑(c[i],k=0)dp[i-1][j-1-k]+dp[i-1]...

2019-08-25 10:41:00 97

转载 Cheapest Palindrome POJ 3280(区间dp)

原题题目链接题目分析有点难度的区间dp题,可以这样定义dp[i][j],把s[i-j]变为回文串的最小花费,显然s[i][i]=0,先说一下删除字母和添加字母的处理,因为当s[i-j]是回文串的时候,再往外扩展一个字母有两种方法,一种是删除这个字母,另一种是再添加一个字母,因此输入删除字母和添加字母的价格只需要保留花费小的就行了,下面用cost[i]表示.考虑dp[i][j]...

2019-08-24 18:25:00 90

转载 Milking Time POJ 3616(基础dp)

原题题目链接题目分析简单dp,很容易想到对于每个区间都只有两个选择,选和不选,因此可以定义一个dp[i],表示在前第i个区间能取得的最大奶量(区间已按起始时间排完序),注意在读入区间时可以直接在末尾时间直接加上R.更新由两个循坏来更新,第一个循环i从头区间遍历到尾区间,第二个循环j从头区间到i区间(不包括i区间),更新时要先判定是否满足cow[i].x>=cow[j]....

2019-08-24 17:07:00 91

转载 Apple Catching POJ 2385(基础dp)

原题题目链接题目分析基础dp题,按照题意很容易给出dp定义,dp[i][j],表示在i时间内,用j次转移机会得到的最大苹果数.dp转移如下,如果j==0,则dp[i][j]=dp[i-1][j],否则 如果当前位置有苹果dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+1.否则dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])...

2019-08-24 16:23:00 104

转载 Sumsets POJ 2229(计数dp)

原题题目链接题目分析计数dp,dp[i]定义为i有多少种分解方案,对一个数i,首先如果它是奇数,则它的方案总数与i-1的方案总数相同,因为只需要在i-1的每个分解方案+1即可.如果它是偶数,则i/2的每个分解方案的每个数*2即可得到i,这样得到的i的分解方案是不存在1的(因为*2所以至少为2),因此还要考虑有1的时候i的分解方案有多少种,可以这样想,先忽略两个1,考虑剩下的数...

2019-08-24 16:12:00 97

转载 Cow Bowling POJ 3176(基础dp)

原题题目链接题目分析非常基础的dp题,先把原图存下来,然后在造一个与原图相匹配的dp,dp更新方案如下,如果j==1 则dp[i][j]只能从上一层的dp[i-1][j]更新过来,因此有dp[i][j]=dp[i-1][j],如果j==i,则dp[i][j]只能从上一层的dp[i-1][j-1]更新过来,因此有dp[i][j]=dp[i-1][j-1],否则dp[i][j]可...

2019-08-24 15:27:00 90

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除