2023.7.11 在北京

1.dp 相关

1.1 path

给定一个 \(n∗m\) 的网格,你在左下角 \((n,1)\),一开始你面向上方,你只能往前走或者右拐,障碍和走过的点不能走。
求走到 \((x,y)\) 的方案数的值,取模。 \(n,m\le 40\)

观察到一右拐,就会进入一个子矩形,并只能在这里面移动了。
设状态 \(f(a,b,x,y,0..3)\) 表示从矩形 \((a,b,x,y)\) 的左上角,右下角,左下角,右下角进入这个矩形,
往后一直在这个矩形内运动,到达终点的方案数。
转移是容易的,只需要枚举在当前方向上走了多少步,然后右拐转移即可。
\(O(n^5)\).

1.2 Paint Pearls

给定长度为 \(n\) 的序列,每个位置有目标颜色,初始时每位都没有颜色。
每次可以选择一个区间把其中每个位置改成目标颜色。
设区间内不同颜色的个数是 \(x\),则操作的代价是 \(x^2\),求最小代价。

显然问题答案有上限 \(n\),只需要每个位置作为一个区间操作即可。
所以我们操作的区间不同颜色数,显然是不能超过 \(\sqrt n\).
我们设状态 \(f_i\) 表示 \(i\) 结尾,前 \(i\) 都被操作了的方案数。
我们在枚举 \(i\) 的时候,顺便处理一下 \(p_1,p_2,p_3..,p_{\sqrt n}\),表示向前有多少的不同颜色时最前的位置。
以此转移即可,复杂度 \(O(n\sqrt n)\).

1.3 Tree Chain problem

一棵树,要求选出不相交的若干条链且权值最大。

\(f(x)\) 表示 \(x\) 子树内权值最大值。
考虑枚举一条 \(lca=x\) 的链 \((x,y,w)\).
\(f(x)=w+\sum f(y)\),其中 \(y\) 表示为所有链上点的非链上的儿子。
\(g(x)\) 表示 \(x\) 所有儿子的 \(f\) 的和。
\(f(x)=链上点 g-所有链上点的 f + f(x)\).
问题转化为树上的树链查询与单点修改,这是一个经典问题。
我们只需维护每个点 \(d\) 表示其与根的距离即可。

2.网络流

2.1 CF786E ALT

显然有一个最小割模型,
\(s\) 连接所有人,容量 \(1\),所有人连接其路上的边,容量 \(inf\),所有边连 \(t\),容量 \(1\).
此时求出最小割即为答案。
但是我们发现所有人连接其路上的边开销过大,我们考虑树剖。
把一个人路上的边拆成若干轻链,重链,再线段树优化建图即可。

posted @ 2023-07-11 19:08  s1monG  阅读(21)  评论(0)    收藏  举报