AtCoder Educational DP (WXYZ)

这些 DP 题中有些基础的模型和优化。做做玩玩顺便复习一下一些基本的东西。

感觉好像没怎么能搜到几个最后几题的题解啊(尽管这几题还是很简单)

Z - Frog3

给定一个序列 \(h\),从 \(i\) 跳到 \(j\) 的代价为 \(C+(h_j-h_i)^2\)。求 \(1\)\(n\) 的最小代价。

\(f_i\) 表示到 \(i\) 的最小代价,则有

\[f_i=C+\min_{j<i} f_j+(h_i-h_j)^2\\ f_i=C+h_i^2+\min_{j<i} (f_j+h_j^2)-2h_ih_j\\ \]

转移即用 \(2h_i\) 的线去切由 \((h_j,f_j+h_j^2)\) 组成的下凸壳。一开始并没有看到 h 已经排序,还写了一半 cdq,然而单调队列即可。

https://atcoder.jp/contests/dp/submissions/27010220

Y - Grid2

一个网格图,其中包含 \(n\) 个障碍点,问不经过障碍点到 \((H,W)\) 的方案数。

经典容斥题。

把障碍点和终点都设为关键点。把所有关键点按照拓扑序排序(此题就是按 \(x\) 排序)。设 \(f(i,j)\) 表示从第 \(i\) 个关键点到第 \(j\) 个关键点的不考虑阻碍的方案数,易知 \(f_{i,j}=\binom{x_j+y_j-x_i-x_i}{x_j-x_i}\)。考虑设 \(g_i\) 表示从初始节点到第 \(i\) 个关键点,除去这个关键点其他障碍全部没有经过的方案数,则有 \(g_i=\binom{x_i+y_i-2}{x_i-1}-\sum_{j<i} g_jf_{j,i}\)

X - Tower

选出一些数,然后排列一下,使得对于任意 \(x\) 满足它前面的 \(w\) 之和要小于等于 \(s_x\)。最大化选出来的价值和。

肯定要先贪心一下。可以推出按照 \(s+w\) 排序最优(考虑对于相邻两个放哪个更优)。

然后背包一下就可以啦。

https://atcoder.jp/contests/dp/submissions/27017190

W - Intervals

\(n\) 个条件,每个条件给定一段区间和一个价值(可正可负),如果这段区间中存在 \(1\) 那么就会让总价值加上这个价值。问总价值最大的一个 \(01\) 序列。

考虑设 \(f(i,j)\) 表示对于前 \(i\) 个数,最后一个取的数为 \(j\) 的最大价值。转移有两种:取 \(i\) 和不取 \(i\)。也就是说这两种分别为 \(f_{i-1,j}\to f_{i,j}\)\(f_{i-1,j}\to f_{i,i}\)。这是可以用线段树维护的。

具体而言,首先处理第二种更新。求出一个全局的最大值后,将 \(f_{i,i}\) 与其取 \(\max\)。然后考虑题目中的得分的贡献。找到所有形如 \([l,i]\) 的区间,然后线段树上 \(f_i(l,i)\) 全部加上这段贡献即可。相当于一个区间更新区间查询。

https://atcoder.jp/contests/dp/submissions/27018962

A~V

剩下的题基本都是没有任何特点的简单DP了。就懒得打了。

posted @ 2021-11-04 15:09  LarsWerner  阅读(155)  评论(0编辑  收藏  举报