省选集训-模拟赛 3

A

2n·n2 的暴力枚举想必不用多说。

考虑暴力 dp,设 fi,S[1,i] 里选了集合 S 的点,那么可以容易的 O(n) 扫描更新,做到 O(2n·n)

注意到对于 fi,S 以及更后面的状态而言,将 aian 排序后的 b1bni+1,b0=0,bni+2=n+1 若已经选的 x,y 满足 i,bi1<x,y<bi,则 x,y 是等效的。

这启发我们将 dp 状态重新定义为 fi,c1,c2,,表示选完 [1,i] 后,在后面的这些段里面,已经选的数字落在每一段的数的个数。

这样看似很暴力,但是事实上可以分析:设当前有 m 段,l1lm(左开右闭),而段长总和是 n,则状态数总和 i=1mlii=1ml=(nm)m

考虑求函数 f(x)=(nx)x 的最值:

f(x)=elnf(x)=exlnnx=(ex)lnnlnx

该函数在 e 时取到最值,(,e) 单调递增,(e,+) 单调递减,且 f(3)>f(2),因此状态数最多是 O(n3n3),加上转移复杂度,实现精细可以做到 O(n23n3)


还存在一个折半法:考虑将前 26 个与后 9 个分治,按照后 9 个的范围将前 26 个划分为 9 段,其 226 种状态化简后并不多,将每个状态取最优的,再加上 29×status 的枚举计算。


还存在一个抽象复杂度做法:可以基于 LIS/LDS 给出暴力枚举(在此基础上增加元素),而我们知道 max(LIS,LCS)n,所以可以 229 左右。


B

考虑分治计算答案,设中间轴是 mid,我们考虑计算起点在 [l,mid] 列中,终点在 [mid+1,r] 列中。

容易发现,走回头路的情况只有一种:

如果要走回头路,则必然是第一行与第三行之间转换,且 mid 左边至多一次,mid 右边至多一次。

而走回头路,最优的 U 字可以预处理(通过前缀和即可知晓,顺序扫一遍,每次相当于加入一条竖线,并给所有竖线加上若干权值)。

注意 U 字并不一定在 [l,r] 范围内

那么现在我们就可以考虑计算了。

fi,j,k 表示第 j 行第 k 列的元素到第 imid 列元素的最短路(kmid 不计算 val(i,mid)k>mid 计算 val(i,mid)

这个可以先简单 dp 不走回头路的情况(这一定不会超出 [l,r] 范围,可以 O(n(rl)) 解决),然后再用 U 去更新决策

那么 (x,y)(p,q) 的最短路可以描述为:

min(f0,x,y+f0,p,q,f1,x,y+f1,p,q,f2,x,y+f2,p,q)

而我们需要计算的就是对于所有的 x[0,n1],y[l,mid],p[0,n],q[mid+1,r] 这样的值的和。

其实挺容易的,我们考虑枚举 0/1/2 谁取到最小并计算。

我们优先让 0 取最小,其次让 1 取最小,最后让 2 取最小,这里是边界上的问题,稍加讨论即可。

那么以 0 取最小为例,事实上是:

{f0,x,y+f0,p,qf1,x,y+f1,p,qf0,x,y+f0,p,qf2,x,y+f2,p,q{f0,x,yf1,x,yf1,p,qf0,p,qf0,x,yf2,x,yf2,p,qf0,p,q

这是一个二维偏序问题,容易计算。

因此本题 O(nmlog2m) 解决了。


C

做法很多啊,根据 lcm 有决策单调性(四边形不等式)等等。

讲一个独一无二的反贪做法:我们考虑从 ii+1

首先每个 b 相同的肯定先取 c 最大的。

考虑在 i 的最优解中删掉 S,并加入 T,满足 1+xSbx=xTbx

且由于最优性,若存在 XS,YT,xXbx=yYby,则可以同时去掉集合 X,Y

根据这样的限制条件打表发现只有 27 个方案,枚举取最优即可。

posted @   spdarkle  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示