一句话题解整理

Solution

Luogu3803

FFT版子题

Luogu2137

时间分块。

用dfs序+划分树预处理,然后考虑修改对询问的影响。

Luogu2051

动态规划。

考虑列的顺序对答案没有影响,设 f[i][j][k] f [ i ] [ j ] [ k ] 表示DP到了第 i i 行, j j 列0个棋子, k k 1 1 个棋子,分类讨论转移即可。

Luogu1879

轮廓线动态规划。

记录轮廓线,每次转移枚举选或不选。

Luogu1131

贪心。

考虑最优的方案一定是在lca处让两个叶子节点距离相等。树上贪心即可。

(这种题是怎么评上提高+/省选-的啊,QAQ)

Luogu1169

单调栈。

考虑棋盘只有两种情况

  1. 黑格行列奇偶不同,白格不同
  2. 白格行列奇偶相同,黑格不同

将第一种格子赋为1,第二种为0。查询最大的全1矩阵或全0矩阵。用单调栈优化到 O(nm) O ( n m )

Luogu1273

树形DP.

f[i][j] f [ i ] [ j ] 表示以 i i 为根的子树中满足 j j 个客户需求的最小收益,直接转移即可。

Luogu2365

斜率优化DP.

f[i] f [ i ] 表示处理前 i i 个货物的最少时间。

f[i]=min{f[j]+sumT[i]×(sumC[i]sumC[j])+S×(sumC[n]sumC[j])} f [ i ] = m i n { f [ j ] + s u m T [ i ] × ( s u m C [ i ] − s u m C [ j ] ) + S × ( s u m C [ n ] − s u m C [ j ] ) }

f[j]=(S+sumT[i])×sumC[j]+f[i]sumT[i]×sumC[i]S×sumC[n] f [ j ] = ( S + s u m T [ i ] ) × s u m C [ j ] + f [ i ] − s u m T [ i ] × s u m C [ i ] − S × s u m C [ n ]

斜率优化即可。

Luogu4072

斜率优化DP.

展开方差公式发现有些为常量,只考虑变量。

fi,j={fi1,j+(sisj)2} f i , j = { f i − 1 , j + ( s i − s j ) 2 }

fi1,j+s2j=2sjsj+fi,js2i f i − 1 , j + s j 2 = 2 s j s j + f i , j − s i 2

Luogu4056

动态规划.

考虑三个点 A(x,y),B(x1,y1),C(x1,y2)(x>x1,y>y1>y2) A ( x , y ) , B ( x 1 , y 1 ) , C ( x 1 , y 2 ) ( x > x 1 , y > y 1 > y 2 )

A>B>C:(xx1)2+(yy1)2+(y1y2)2 A − > B − > C : ( x − x 1 ) 2 + ( y − y 1 ) 2 + ( y 1 − y 2 ) 2

A>C:(x1x1)2+(yy2)2 A − > C : ( x 1 − x 1 ) 2 + ( y − y 2 ) 2

因为 (yy1)2+(y1y2)2<((yy1)+(y1y2))2 ( y − y 1 ) 2 + ( y 1 − y 2 ) 2 < ( ( y − y 1 ) + ( y 1 − y 2 ) ) 2
所以第一种转移更优。

所以每次转移时转移每一列最下面的点即可。

Luogu4323

树哈希.

用换根DP求出A树中以每个点为根的哈希值与B树中去掉某个叶子节点的哈希值,MAP判重即可。

Luogu3648

斜率优化DP.

考虑顺序不影响答案,推完DP方程后斜率优化即可。

Luogu4027

斜率优化DP.

考虑每次要么卖出所有股票要么花光所有钱,列出方程后CDQ分治+斜率优化即可。

Luogu3628

斜率优化DP.

fi=max{fj+a(sisj)2+b(sisj)+c} f i = m a x { f j + a ( s i − s j ) 2 + b ( s i − s j ) + c }

fi+2asisjas2ibsic=fj+as2jbsj f i + 2 a s i s j − a s i 2 − b s i − c = f j + a s j 2 − b s j

Luogu2839

二分+主席树.

对于每个询问二分答案 k k ,比 k k 小的设为 1 − 1 ,大于等于 k k 则设为 1 1 ,判断能否使区间和 0 ≥ 0 .

考虑按照大小顺序构建二分时的 (1,1) ( 1 , − 1 ) 序列,那么每次只会修改一个位置,主席树维护即可。

Luogu2839

DP+容斥.

g[k][i][j] g [ k ] [ i ] [ j ] k k 种颜色棋子恰好填满 i i j j 列的方案数

g[k][i][j]=Ckijx=1iy=1jg[k][i][j]×Cxi×Cyj g [ k ] [ i ] [ j ] = C i j k − ∑ x = 1 i ∑ y = 1 j g [ k ] [ i ] [ j ] × C i x × C j y

f[k][i][j] f [ k ] [ i ] [ j ] k k 种颜色棋子恰好填满 i i j j 列的方案数

f[k][i][j]=x=0i1y=0j1f[k1][ix][jy]×Cxi×Cyj f [ k ] [ i ] [ j ] = ∑ x = 0 i − 1 ∑ y = 0 j − 1 f [ k − 1 ] [ i − x ] [ j − y ] × C i x × C j y

Luogu3571

斜率优化DP.

sum[i] s u m [ i ] 表示深度大于 i i 的节点数.

ans[k]=max(i+sum[i]k) a n s [ k ] = m a x ( i + ⌈ s u m [ i ] k ⌉ )

发现这是一条直线,斜率优化即可。

UOJ12

数论。

稍微分析可以发现

  1. a=g,b=l a = g , b = l 时,答案取最大值。
  2. a=b=n a = b = n 时,答案取最小值。

注意精度问题。

UOJ13

Trie树。

按照题意模拟,为每个节点建立go指针,当当前为字符串结尾或下一字符为/时尝试跳转。

UOJ14

按秩合并并查集。

考虑撤销操作:

  1. 上一次操作为加边,则直接删除即可
  2. 上一次操作为删边,那么相当于没有删边,上一次操作答案判断删除 k k 条边后是否仍然存在生成树。

Luogu2515

Tarjan+DP。

考虑依赖关系类似于一棵树,Tarjan缩点后DP即可。

你可能感兴趣的:(文章类型——题解,文章类型——娱乐向)