test0912

T2数组开小了,挂了50pts

T1

预计:50pts
实际:50pts
\(\mathcal O(n^2\log n)\) 是很好想的,枚举两个点 \(i,j\),每次有改变的只有中间的点,将 \(j\) 的贡献减去 \(i\) 的贡献即可

我们将每个点看成一个一个矩形,高为 \(a_i\),交换两个点之后,以这两个点为顶点的对角线中的点的贡献会从 \(2\) 变为 \(0\),我们假设选择了 \(i\)\(j\),如果 \(a_i\leq a_j\) 那逆序对是不减反增的,如果有一个点 \(u\) 满足 \(u<i,a_u>a_i\),那我们选择 \(u\) 一定是更优的,所以对于一个 \(j\) 来说,和它最好的 \(i\) 为前缀最大值,\(i\) 同理

所以我们只要枚举 \(i\) 用线段树维护 \(j\) 即可

T2

预计:100pts
实际:20pts
先考虑如果为排列,我们一定是从小考虑到大,且在 \(n-2\) 前是一定合法的,剩下三位我们可以暴力分讨,它们有可能会用到 \(n-3\) 才会有解

如果不是排列,我们可以将它离散化,相同的我们也给它们来个排名,但这样可能会使得最后剩下的不合法,例如:$$1\ 2\ 3\ 3$$ 我们有可能会将它变成 $$1\ 2\ 3\ 4$$ 这是合法的,但如果我们将它变成这样 $$1\ 2\ 4\ 3$$ 它就不合法了

所以我们对于剩下的三个如果有相同的暴力重新排名即可

T3

预计:20pts
实际:20pts
我们如何找到这个最小的起点,我们可以先从一跑,求出目前的到每一个点的油耗,而最小的点一定是最小的起点,因为如果仍然往回拓展,当他开到这个点时一定为负

现在我们设计状压dp:\(f_s\) 表示构成一个油量始终大于 \(0\) 的折线,使用了集合 \(s\) 中的路段的方案数,\(s\) 为二进制压缩数,\(g_s\) 表示始终不小于 \(0\) 的方案,设 \(U\) 为全集,这答案为 \(\sum_{s}{f_sg_{U-s}|s|}\)

T4

预计:10pts
实际:10pts
我们将不可以放在一起的点连边,图肯定为一条长为 \(m\) 的链和一些单点,则我们选择的点为图上不相邻的点

我们设 \(f_{i,j}\) 表示一条 \(m\) 的链划分成 \(j\) 段的方案数 \(\sum_{i=0}^{m}{(-1)^{m-i}\times f_{m,i}\times (m-n+i)}\)

这样的转移是 \(O(m^2)\) 的,对于较大的阶乘,我们使用分块打表

posted @ 2023-09-13 15:50  noipwen  阅读(26)  评论(0)    收藏  举报