老年(已退役)选手复习计划 PART2

放上来有些符号产生了一点偏差。。不知道怎么变成了问号。。比较懒懒得改了。。意会,意会。。

2017.7.4:
概率与期望:
1.BZOJ1415:预处理p[x][y]表示,猫在x,鼠在y时猫下一步走哪里。然后记忆化搜索。
2.BZOJ3450:再求一个期望长度就好解决了。

斜率优化:
1.BZOJ1010:推式子。
2.BZOJ1096:同上。
3.BZOJ3156:同上。
4.BZOJ3437:同上。
5.BZOJ3675:同上(开二维,滚动一下)。
6.BZOJ4518:同上。
7.POJ4002:求出每个时刻的最小花费。然后斜率优化。

数位dp:
1.BZOJ1026:f[i][j]表示i位,开头为j的方案数。
2.HDU3555:f[i][j]表示i位,开头为j的方案数。

递推与动规:
1.BZOJ1270:f[i]表示第i层的最大值,g[i]表示当前树的最大值。g[j]=max(g[j],f[min(m+1),j+Delta])+t[i][j];f[i]=max(f[i],g[j]);
2.BZOJ1084:m=1直接n3dp,m=2,g[i][j][k]表示第一行取到i,第二行到j,取了k个矩阵的最大和。
3.BZOJ1040:网络流可过80pts。对每棵换套树,断环为链,强制其中一点不取并以该点为根树形dp,做两遍。
4.BZOJ1222:f[i]表示第一台机器工作到时间i,第二台机器加工道德最小时间。
5.BZOJ1609:f[i][j]表示有序排到第i个位置数字为j时,所需要的最少步数。
6.BZOJ1677:i为奇数时,f[i]=f[i-1],i为偶数时f[i]=f[i-1]+f[i>>1]。
7.BZOJ1207:f[i]表示打第i只时最多能打多少只,直接m2。。跑得飞快。
8.BZOJ2326:f[i]=f[i?1]*10^k+i (10^k?1<=i<10^k),分段矩乘。
9.BZOJ1037:f[i][j][k][l]表示i个男生j个女生。后缀中男生比女生多的最多为k,女生比男生多的最多为l的方案数,kl<0都归到=0处理。转移过程中f[i][j][0][l]会推到f[i+1][j][1][l?1]和f[i][j+1][0][l+1],发现这样没有任何问题,当前位置放男生,后缀中男生比女生多的最多为1,女生比男生多的显然-1。当前位置放女生,后缀中女生比男生多的+1,男生比女生多的仍然<0,还是0。
10.BZOJ1009:预处理b[i][j]表示匹配到第i位再加一个字母匹配到第j位的方案数,然后矩阵乘法优化dp,(还TM好理解,好理解个鸡皮,现在根本看不懂)。
11.BZOJ1898:搞出来13个矩阵,然后XJB乘。
12.BZOJ1296:每一行预处理f[i][j]表示刷到前i格,用j次的最大价值。然后分组背包合并。
13.BZOJ1537:按x排序,y离散化, f[i]=max(f[i],f[j]+p[i])(j<iy[j]<=y[i]) 。树状数组维护一下最大值。
14.BZOJ1592:离散化,正反分别做一遍dp。。
15.BZOJ1801:f[i][j][k]表示到i行,j列放了1个,k列上有两个的方案数。
16.BZOJ3688:f[i][0/1]表示第i个,当前是上升/下降的方案数,然后纵坐标离散化一下,树状数组维护和就好。
17.BZOJ1672:线段树维护。。
18.BZOJ2101:f[i,j]=sum[i,j]?min(f[i+1,j],f[i,j?1])。f[i,j]表示,从i?j,先手取者的最大获利。 改成区间dp发现第二维没有用,删掉就可以过了。
19.BZOJ1046:注意是位子字典序最小。倒过来做一遍最长下降子序列。f[i]表示以i开头的最长上升子序列长度、找答案的时候就顺着找,每次满足条件就输出。
20.BZOJ1044:二分,然后各种优化加上去再dp就好了。。
21.BZOJ1057:单调栈搞一下。
22.BZOJ2023:滚一下,再加个前缀和。
23.BZOJ1630:同上。
24.BZOJ2091:f[i]表示前i个,先手取得的最大分差。
25.BZOJ2708:f[i]表示前i对,最多能丢弃的个数。f[i]=f[j]+Cal(j+1,i)。Cal过程枚举一条线跨越区间长度,然后检验。
26.BZOJ2298:每个人所在的可行区间为[l+1,n-r]。题目就可以转化为求若干个不相交区间的最大权值和。用n减最大和就是最少的说谎人数。f[i]=max(f[l-1]+sum[l,r])。
27.BZOJ4870:求nk个数中取的数模k为r的方案数。显然有f[i][j]=f[i-1][j]+f[i-1][j-1]。矩阵优化一下。
28.BZOJ4818:容斥一下,求一个质数都没有的方案。记num[i]为模p为i的数的个数。f[i][(j+p)%p]+=num[p]*f[i-1][j]。矩乘优化。
29.BZOJ4517:ans=C(n,m)dp[n-m]。dp[i]为i的错排数。dp[i]=(i-1)(dp[i-1]+dp[i-2])。

2017.7.5:
树形dp:
1.BZOJ4813:f[i][j][0/1]表示以i为根,走j步,回/不回到根的方案数。考虑一下从该点出发对根节点答案的贡献。f[x][j][1]=max(f[v][k-1][1]+f[x][j-k][0]),f[x][j][0]=max(f[v][k-2][0]+f[x][j-k][0]),f[x][j][1]=max(f[v][k-2][0]+f[x][j-k][1]);
2.BZOJ1907;f[i][0/1]表示以i为根,该点是否作为转折点的覆盖该子树的方案数。
3.BZOJ4027:贪心,儿子的ans值从小到大排序,取到不能取为止。
4.BZOJ4169:感觉怪怪的dp。。求第几大。。f[x]=min(g[v]),g[x]=sum(f[v]);

线段树:
1.BZOJ4653:按长度排序,左端点向后扫,右端点非降,线段树check一下。
2.BZOJ4592:两个log卡过去了。。脑洞的值为1,正常的为-INF,二分一下区间赋值的位置。
3.BZOJ4597:和加减没什么关系,维护一下前缀积的和。

欧拉函数:
1.BZOJ2190:仔细观察一下图发现,若某个点可取,那么它的横纵坐标的最大公约数为1.
2.BZOJ2818:筛个欧拉函数再求个前缀和。
3.BZOJ2705:枚举每个因数。
4.BZOJ2186:∏p[i]?1/p[i]*n!

乘法逆元:
1.BZOJ4403:每个位置加i,变成严格上升序列。ans=∑C(M+i?1,i).
2.BZOJ2111:发现是一棵二叉树,f[i]=f[l]*f[r]*C(sz[i]-1,sz[l]).
3.BZOJ1951:ans=G^(∑(d|n)C(n,d)mod(P?1))mod P。

二分图匹配:
1.模拟题http://blog.csdn.net/ep1c_heret1c/article/details/68934872:连通块之间分开考虑,找失配点。

FFT:
1.BZOJ2194:a或者b反过来,裸题。
2.BZOJ3527:把qi弄进去。记b[i]=1/(i^2),那么式子就变成了两个卷积。
3.BZOJ4827:展开(∑(ai?bi?z+x)^2 ),n*x2+2∑(ai+b(i?z))*x+∑(ai^2+b(i?z)^2)?2∑ai*b(i?z),最后常数项是一个卷积,求个最大值然后枚举求极值就可以了。
4.BZOJ3160:容斥变成求回文子序列个数。f[i]表示以i为中心的对称点个数,f[i]=(Σ[1<=j<=i-1]bool(str[j]==str[i-j]))+1>>1 括号里的是个卷积。

2017.7.6:
高斯消元:
1.BZOJ1013:两点之间距离列n个方程组,移项变成n元1次方程。

CDQ分治:
1.BZOJ1176:容斥一下,裸CDQ。
2.BZOJ3262:先去重,CDQ求完以后,再考虑相同的对答案的影响。
3.BZOJ2683:同1176。
4.BZOJ3295:倒序加值,一个值加进来,对答案的影响就是左边比它大的数和右边比它小的数,发现是三维偏序,分开做两遍CDQ。
5.BZOJ1935:同1176,2683.
6.BZOJ4170:位置看做x坐标,a值看做y坐标。就是两个点的曼哈顿距离小于等于k,把坐标系旋转45度,把(x,y)变成(x-y,x+y),就变成了切比雪夫距离。询问的y坐标小于0的直接舍弃。

你可能感兴趣的:(老年(已退役)选手复习计划 PART2)