《算法竞赛进阶指南》
文章平均质量分 68
yezzz.
这个作者很懒,什么都没留下…
展开
-
280. 陪审团 - AcWing (拔河DP,反推过程)
280. 陪审团 - AcWing分析:f[i][j][k]f[i][j][k]f[i][j][k] 表示前 iii 个人选取 jjj 个人,总差值为 kkk 时,总分和最大为多少总差值取值范围 [−400,400][-400,400][−400,400],对负数作偏移,base=400base=400base=400#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=205原创 2021-10-05 21:32:18 · 137 阅读 · 0 评论 -
传纸条 and 方格取数 (线性DP,解题关键)
传纸条分析:两条路径同时进行,设走到的坐标分别为 (i,j),(x,y)(i,j),(x,y)(i,j),(x,y)容易发现,同一时刻,i+j=x+yi+j=x+yi+j=x+y (解题关键点) , 故还可以降一维并且题目还有一条件,同一点只能经过一条路径这好办,即当 i=xi=xi=x 时,两点才会在同一点,将这种情况去掉即可设 f[i][j][x]f[i][j][x]f[i][j][x] 表示一点传递到 (i,j)(i,j)(i,j),另一点传递到 (x,y)(x,y)(x,y)原创 2021-10-04 20:20:00 · 72 阅读 · 3 评论 -
C-Making the Grade(线性DP,离散化,结论)
C-Making the Grade分析:分两类:对单调上升和单调下降分别求一遍,取最小值即可引理:在满足 SSS 最小的前提下,一定存在一种构造序列 BBB 的方案,使得 BBB 中数值都在 AAA 中出现过(证明见 yyy总:AcWing 273. 分级 - AcWing)有了这个结论,我们就可以将序列 AAA 中的元素离散化了(从小到大排序记录到数组 bbb )f[i][j]f[i][j]f[i][j] 表示构建前 iii 个,以 b[j]b[j]b[j] 结尾的最优解原创 2021-10-04 16:24:19 · 110 阅读 · 0 评论 -
LCIS (线性DP,滚动数组)
LCIS分析:最长公共上升子序列先按常规打下来 O(n3)O(n^3)O(n3)fi,jf_{i,j}fi,j 表示以 a[i],b[j]a[i],b[j]a[i],b[j] 结尾(a[i],b[j]a[i],b[j]a[i],b[j]作为最后的结尾)的 LCISLCISLCISO(n3)O(n^3)O(n3)#include <bits/stdc++.h>using namespace std;const int N=3005; int a[N],b[N],f[N][原创 2021-10-03 21:14:57 · 553 阅读 · 0 评论 -
2279 -- Mr. Young‘s Picture Permutations (poj.org) (线性DP)
2279 – Mr. Young’s Picture Permutations (poj.org)分析:从左到右,从上到下都是递减考虑将 1 n1~n1 n 去填这个阶梯状矩阵,动态规划算法如下:因为 k<=5k<=5k<=5 且 Ni<=30N_i<=30Ni<=30 ,设 fi,j,k,q,rf_{i,j,k,q,r}fi,j,k,q,r (i>=j>=k>=q>=r)(i>=j>=k&g原创 2021-10-03 14:05:06 · 72 阅读 · 0 评论 -
P2480 [SDOI2010]古代猪文 (欧拉函数,Lucas定理,CRT,组合数学)
P2480 [SDOI2010]古代猪文Lucas定理:(组合数学取模运算)Cnm≡Cn mod pm mod p∗Cn/pm/p mod pC_n^m \equiv C_{n\ mod\ p}^{m\ mod\ p}*C_{n/p}^{m/p}\bmod pCnm≡Cn mod pm mod p∗Cn/pm/pmodp分析:数论大杂烩:欧拉函数,LucasLucasLucas定理,CRTCRTCRT原创 2021-09-27 20:45:16 · 91 阅读 · 0 评论 -
P4778 Counting swaps (组合数学,打表推通项公式,OEIS)
P4778 Counting swaps分析:每个 pip_ipi 向 iii 连边,便构成一张由若干个简单环组成的无向图,目标状态是 nnn 个自环的图引理:把一个长度为n的环变成n个自环,最少需要n-1次交换操作(证明略)设 f[n]f[n]f[n] 表示用最少的步数将一个长度为 nnn 的环变成 nnn 个自环,共有多少种操作方法若将该环拆分成长度为 xxx 和 yyy 的两个环 (x+y=n)(x+y=n)(x+y=n) ,设 T(x,y)T(x,y)T(x,y) 表示有多少种原创 2021-09-27 17:33:16 · 187 阅读 · 1 评论 -
棋盘覆盖 (黑白染色,二分图最大匹配)
棋盘覆盖分析:这题绝妙!!!令 s=行坐标+列坐标s=行坐标+列坐标s=行坐标+列坐标 ,当一个格子的 sss 为奇数时,那能与当前格子匹配的 444 个格子的 sss 都为偶数(反之亦然)然后就可以跑二分图最大匹配了,sss 为奇数的为一集合,sss 为偶数的是另一集合#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+5;vector <原创 2021-09-20 20:35:25 · 265 阅读 · 0 评论 -
1845 -- Sumdiv (poj.org)(乘法逆元,求约数之和)
乘法逆元板子题:1845 – Sumdiv (poj.org)题意:让求 aba^bab 的所有约数之和 modmodmod 9901分析:由算术基本定理的“约数”和推论,对 aaa 做质因数分解ans=(1+p1+p12+...+p1c1∗b)∗(1+p2+p22+...+p2cn∗b)∗...∗(1+pn+pn2+...+pncn∗b)mod 9901ans=(1+p_1+p_1^2+...+p_1^{c_1*b})*(1+p_2+p_2^2+...+p_2^{c_n*b})*原创 2021-09-07 21:53:36 · 75 阅读 · 0 评论 -
The Luckiest number (欧拉函数,问题转换,引理,快速乘)
The Luckiest number题意:问多少个 888 连起来会是正整数 LLL 的倍数分析:关键一步,巧妙转换:xxx 个 888 连在一起组成的数可以写作 8(10x−1)/98(10^x-1)/98(10x−1)/9题目便是让我们求最小的x,满足:L∣8(10x−1)9L|\frac{8(10^x-1)}{9}L∣98(10x−1) , 设 d=gcd(L,8)d=gcd(L,8)d=gcd(L,8)L∣8(10x−1)9⇔9L∣8(10x−1)⇔9Ld∣10x−1原创 2021-09-07 15:27:18 · 211 阅读 · 0 评论 -
0x32 数学知识-约数
0x32 数学知识-约数[HAOI2007]反素数ANT反素数,是约数最多的最小正整数令 g(x)g(x)g(x) 为正整数 xxx 的约数个数。例 g(1)=1,g(6)=4g(1)=1, g(6)=4g(1)=1,g(6)=4若正整数 xxx 满足:对于任意 <x<x<x 的正整数 i(0<i<x)i(0<i<x)i(0<i<x) ,都有 g(x)>g(i)g(x)>g(i)g(x)>g(i) ,则称 xxx原创 2021-09-05 14:34:36 · 319 阅读 · 0 评论 -
0x31 数学知识-质数
0x31 数学知识-质数Prime Distance分析:素数区间筛,筛两遍即可#include <bits/stdc++.h>#define int long longusing namespace std;const int N=1e5+5;int b[N], pri[N], tot;void isp(int n=N-5){ b[0]=b[1]=1; for(int i=2;i<=n;i++) { if(!b[i])原创 2021-09-02 11:18:54 · 270 阅读 · 0 评论