51nod五级题小记

来源:互联网 发布:php mysql 参数化 编辑:程序博客网 时间:2024/06/04 18:07

1028 大数乘法 V2(void)

1040 最大公约数之和(枚举因数,计算贡献度。欧拉函数)

题意:给出一个n,求1-n这n个数,同n的最大公约数的和。比如:n = 6。1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15。(n1e9)。

思路:考虑枚举因数i,那么它对答案的贡献就是i×nx=1[gcd(n,x)==i]i×nx=1[gcd(n/i,x/i)==1i×eular(n/i)

1020 逆序排列(dp)

题意:给出2个数n和k,求1-n的全排列中,逆序数为k的排列有多少种?(2n1000,0k20000)

思路:简单dp,因为dp状态容易定义:dp[i][j]:前i个数字,构成逆序对为j个的排列的种数。然后考虑第i+1个数字放在序列中的不同地方产生新的k个逆序对(0ki),就能得到转移方程dp[i+1][j]=k=ik=0dp[i][jk]。此时复杂度不可接受。但是如果再写一项dp[i+1][j-1]即可通过错位相减得到。dp[i+1][j] = do[i + 1][j] + dp[i][j] - dp[i][j-i]。

1084 矩阵取数问题 V2(dp)

题意:一个M*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,先从左上走到右下,再从右下走到左上。第1遍时只能向下和向右走,第2遍时只能向上和向左走。两次如果经过同一个格子,则该格子的奖励只计算一次,求能够获得的最大价值。(2 <= M, N <= 200,1 <= A[i,j] <= 10000)

思路:其实等价于从左上角有两个人同时往右下走,易得dp[x1][y1][x2][y2],第一个人在1号点,第二个人在2号点的最大价值,然后因为在矩阵上,可以发现x1+y1=x2+y2=len,优化掉一维空间,dp[x1][x2][len]。即可。

1201 整数划分 (dp)

题意:将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2,4} {1,2,3},共4种。(1N50000)

思路:整数划分都是套路,第二维维护最大的数是多少。最大只有n
所以有dp[i][j]=jk=1dp[ij][k]
再写一个dp[i1][j1]=j1k=1dp[ij][k]
两者做差,得到dp[i][j] = dp[i-1][j-1]+dp[i-j][j].复杂度Onn

1052 最大M子段和 (void)

题意:N个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的。如果M >= N个数中正数的个数,那么输出所有正数的和。(2 <= N , M <= 5000,-10^9 <= a[i] <= 10^9)

思路

1383 整数分解为2的幂 (dp)

题意:任何正整数都能分解成2的幂,给定整数N,求N的此类划分方法的数量!由于方案数量较大,输出Mod 1000000007的结果。比如N = 7时,共有6种划分方法

思路:因为2的幂的特性,所以判断一下有无1即可。

if(i % 2 == 0) dp[i] += dp[i / 2];dp[i] += dp[i - 1];

1120 机器人走方格 V3(void)

题意:N * N的方格,从左上到右下画一条线。一个机器人从左上走到右下,只能向右或向下走。并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?(2N109)

1537 分解(矩阵快速幂)

题意: 问(1+2)n 能否分解成 m+m1的形式 如果可以 输出 m%1e9+7 否则 输出no(n1018

思路:手动推前几项,发现都满足结论,大胆猜想结论恒成立,数学归纳法易证。所以到此,用矩阵推一推即可。

原创粉丝点击