专栏文章

一道有趣计数题的 O(n^2) 做法

算法·理论参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqvshm0
此快照首次捕获于
2025/12/04 11:33
3 个月前
此快照最后确认于
2025/12/04 11:33
3 个月前
查看原文
从 CF1943D2 的 这篇题解 的同类题里找到的东西,还挺有意思的。
给定序列 ww,定义一个长度为 nn 的序列 aa 的权值为 i=1n2wmax(ai,ai+1,ai+2)\prod_{i=1}^{n-2} w_{\max(a_i,a_{i+1},a_{i+2})},求所有值域为 [0,n][0,n] 的非负整数序列的权值和。
首先有一个非常暴力的dp:fi,x,yf_{i,x,y} 表示当前考虑到 ii,最后两个位置分别为 xxyy 的权值和。转移可以用前缀和优化到 O(n3)O(n^3)
接下来我们发掘一下性质。注意到,如果 x>yx>y,则 yy 的取值和当前的 dp 值没有关系。所以考虑在这个情况下先不去钦定 yy 具体是多少。
所以考虑优化状态设计:
  • fi,xf_{i,x} 表示当前最大值为 ai=xa_i=x 的权值和。
  • gi,xg_{i,x} 表示当前最大值为 ai1=xa_{i-1}=x 的权值和,特别地,我们暂时认为 ai=0a_{i}=0,这个数具体是多少之后再钦定。
转移考虑新的最大值是谁。
  • [xy]fi,x×wyfi+1,y[x\le y]f_{i,x}\times w_y\to f_{i+1,y}
  • fi,x×wxgi+1,xf_{i,x}\times w_x\to g_{i+1,x}
  • [xy]gi,x×wy×xfi+1,y[x\le y]g_{i,x}\times w_y\times x\to f_{i+1,y}
  • [x>y]gi,x×wx×(y+1)fi+1,y[x>y] g_{i,x}\times w_x\times (y+1)\to f_{i+1,y}
  • [x>y]gi,x×wxgi+1,y[x>y] g_{i,x}\times w_x\to g_{i+1,y}
转移可以使用前缀和优化做到 O(n2)O(n^2)
和 CF1943D2 一样,一个很重要的思想就是思考什么东西是“不重要”的,对于 CF1943D2 来说是当 ii 不合法时 i1i-1 的合法性,对于本题来说是当 ai1>aia_{i-1}>a_iaia_i 的具体取值。

评论

0 条评论,欢迎与作者交流。

正在加载评论...