25.11.19
CF38H
神经病,先跑最短路,然后转成每个人有 \(n-1\) 种排名可选。
如果是对排名关系做 DP,不容易套上那个发牌子的策略,会重。
诶要是我们知道真的分数线就好了。
对啊我们可以枚举这个。
枚举分数线发现还是需要考虑一些同分的神经病,但是注意到编号也是排序的参考,于是直接枚举两个人,分别钦定为铜首和金尾。
然后我们就可以做 DP 了,考虑前 \(i\) 人,金银牌各给了 \(j,k\) 人。
诶主播我们怎么判这个人能加进去,显然金牌只需满足最好成绩能战胜金尾,铜牌只需满足最差成绩能输给铜首,而银牌……你可以减出来。
CF1750F
非常经典啊,考虑我们怎样才不能恢复电力。
题目中的条件显然过于复杂,我们需要找一个更能做 DP 的条件。
如果两个 1 之间还有 01 穿插的结构,那么我们就需要递归下去考虑,非常麻烦,于是我们直接考虑这个极小的 1...10...01...1 状物。
如果所有这个结构都不能操作,显然更大的结构因为由它们拼成,也不能操作。
因此不可操作的充要条件就是形如这样的段中,0 极长段的长度超过两侧 1 极长段的长度之和。
此时就可 DP 了,设 \(f(i,j)\) 表示对于长为 \(i\) 且两段钦定为 1,右端操作到不能再操作时的 1 极长段为 \(j\) 的方案数。
\(f(i,i)\) 的转移容斥即可,\(f(i,j)\) 的转移则是在 \(f(j,j)\) 前面拼上一段 ...1...10...0,可以前缀和优化这个转移。
CF1696H
显然是在贪心策略上改计数。
正负数分开考虑,按绝对值递减排序后,枚举一下分别选了多少,此时可以保证乘积的绝对值最大。
而调符号就是考虑把最后一个正数换负数或者负数换正数这样的。
诶我们好像知道怎么做了,考虑分别给两边枚举一个前缀,然后在这俩前缀中选出 \(m\) 个,这个的贡献是可以预先计算的。
然后我们再枚举一下换进来的东西,这里是可以暴力判大小的。
大概是这个状物,我们来理一下。
- 首先枚举选了多少个负数,用来判符号。
- 然后是分别枚举一个 \(i,j\),表示在正数中考虑了前 \(i\) 个且钦定了加入第 \(i\) 个,在负数中考虑了前 \(j\) 个且钦定了加入第 \(j\) 个。
- 枚举出 \(i,j\) 外的一个正数和负数,然后做对应替换。
这样是 \(\mathcal{O}(n^5)\) 的,注意到做替换这里其实跟负数具体多少个没有关系,于是可以拿出来只算一次。
这样是 \(\mathcal{O}(n^4)\) 的,瓶颈是我们拿出来算的这个替换。
观察一下发现枚举替换中的内容基本支持我们前缀和优化,只需在换两个数时拆掉一项 \(\max\),而 \(\max\) 这一项的分界点显然具有单调性,可以双指针扫出来。
时间复杂度 \(\mathcal{O}(n^3)\),就是写着很石,有若干细节,比如只选一种符号数的需要单独做。

浙公网安备 33010602011771号