Solution
Luogu3803
FFT版子题
Luogu2137
时间分块。
用dfs序+划分树预处理,然后考虑修改对询问的影响。
Luogu2051
动态规划。
考虑列的顺序对答案没有影响,设 f[i][j][k] f [ i ] [ j ] [ k ] 表示DP到了第 i i 行,列0个棋子, k k 列个棋子,分类讨论转移即可。
Luogu1879
轮廓线动态规划。
记录轮廓线,每次转移枚举选或不选。
Luogu1131
贪心。
考虑最优的方案一定是在lca处让两个叶子节点距离相等。树上贪心即可。
(这种题是怎么评上提高+/省选-的啊,QAQ)
Luogu1169
单调栈。
考虑棋盘只有两种情况
- 黑格行列奇偶不同,白格不同
- 白格行列奇偶相同,黑格不同
将第一种格子赋为1,第二种为0。查询最大的全1矩阵或全0矩阵。用单调栈优化到 O(nm) O ( n m ) 。
Luogu1273
树形DP.
设 f[i][j] f [ i ] [ j ] 表示以 i i 为根的子树中满足个客户需求的最小收益,直接转移即可。
Luogu2365
斜率优化DP.
设 f[i] f [ i ] 表示处理前 i i 个货物的最少时间。
斜率优化即可。
Luogu4072
斜率优化DP.
展开方差公式发现有些为常量,只考虑变量。
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:(x−x1)2+(y−y1)2+(y1−y2)2 A − > B − > C : ( x − x 1 ) 2 + ( y − y 1 ) 2 + ( y 1 − y 2 ) 2
A−>C:(x1−x1)2+(y−y2)2 A − > C : ( x 1 − x 1 ) 2 + ( y − y 2 ) 2
因为
(y−y1)2+(y1−y2)2<((y−y1)+(y1−y2))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.
Luogu2839
二分+主席树.
对于每个询问二分答案 k k ,比小的设为 −1 − 1 ,大于等于 k k 则设为,判断能否使区间和 ≥0 ≥ 0 .
考虑按照大小顺序构建二分时的 (1,−1) ( 1 , − 1 ) 序列,那么每次只会修改一个位置,主席树维护即可。
Luogu2839
DP+容斥.
g[k][i][j] g [ k ] [ i ] [ j ] 第 k k 种颜色棋子恰好填满行 j j 列的方案数
f[k][i][j] f [ k ] [ i ] [ j ] 前 k k 种颜色棋子恰好填满行 j j 列的方案数
Luogu3571
斜率优化DP.
设 sum[i] s u m [ i ] 表示深度大于 i i 的节点数.
发现这是一条直线,斜率优化即可。
UOJ12
数论。
稍微分析可以发现
- 当 a=g,b=l a = g , b = l 时,答案取最大值。
- 当 a=b=n‾√ a = b = n 时,答案取最小值。
注意精度问题。
UOJ13
Trie树。
按照题意模拟,为每个节点建立go
指针,当当前为字符串结尾或下一字符为/
时尝试跳转。
UOJ14
按秩合并并查集。
考虑撤销操作:
- 上一次操作为加边,则直接删除即可
- 上一次操作为删边,那么相当于没有删边,上一次操作答案判断删除 k k <script type="math/tex" id="MathJax-Element-56">k</script>条边后是否仍然存在生成树。
Luogu2515
Tarjan+DP。
考虑依赖关系类似于一棵树,Tarjan缩点后DP即可。