区间dp & CF2129D

区间dp & CF2129D

区间 dp 特征:

在解决大问题时可通过划分子区间缩小问题,再通过合并相邻子区间的答案得到总答案,即不同区间的答案具有 结合律

  1. 不同区间的答案选择不会相互干扰(后面的选择不会影响前面的);
  2. 不同子区间存在相互限制,但可通过把限制记录在状态内,从而使得限制在子区间合并时被满足。

CF2129D *2600

题意:

初始从左往右有 \(n\) 个白色单元格,对于一个长为 \(n\) 的排列 \(p_i\) ,在第 \(i\) 秒把单元格 \(p_i\) 染成黑色,于此同时对于离 \(p_i\) 最近的黑色单元格 \(x\) ( 如果有多个最近的黑色单元格,则选择索引最小的单元格),对于 \(x\) 的分数 \(s_x\)\(1\)

现在给出得分序列 \(s\) ,其中 \(s_i=-1\) 表示未确定得分,计算可以产生此着色序列的不同排列 \(p\) 的数量,答案对 \(998244353\) 取模。

其中 \(n\le 100\)

思路:

该问题答案数较多,依次考虑排列 \(p\) 的每一位肯定不够现实。我们转换视角,考虑单元格上的染色顺序。对于一个单元格区间 \([l,r]\) ,可以发现当一侧已经染完色后,当出现新的染色时肯定不会越过这一侧对其他位置加分。

因此答案可以规约到一个个子区间中,考虑区间 \(dp\) ,可设 \(dp[l][r]\) 表示区间 \(l\sim r\) 已被染色的方案数。此时进一步考虑子区间中的染色情况,发现 \(l\sim r\) 中最先被染色的位置 \(k\) 一定会对该区间外的一个黑色单元格造成贡献,不满足我们上面所说的特征 \(1\) ,因此考虑能否记录该贡献位置会对哪一侧造成多少贡献。

因此设 \(dp[l][r][a][b]\) 表示区间 \(l\sim r\) 已被染色,对 \(l-1\) 的得分贡献为 \(a\) ,对 \(r+1\) 的得分贡献为 \(b\) 。转移考虑依次枚举区间 \(l\sim r\) 中最先被染色的位置 \(k\) ,从而可以考虑到 \(l\sim k-1\)\(k+1 \sim r\) 是否能够使得位置 \(k\) 满足得分限制。因为我们只考虑了一段单元格区间内的染色顺序,未考虑在排列 \(p\) 中的位置,所以在子区间合并的时候要加入转移系数 $ \binom{r-l}{k-l}$ 。

综上所述,转移方程为

\[dp_{l,r,a+[w(l,r,k)=l-1],b+[w(l,r,k)=r+1]}=\\\sum_{k=l}^r\sum_{x=0,y=s_k-x}^{s_k} dp_{l,k-1,a,x} \times dp_{k+1,r,y,b} \times \binom{k-l}{r-l} \]

其中 \(w(l,r,k)\) 表示对于 \(k\) 会对位置 \(l-1\) 还是 \(r+1\) 做出加分。

\[w(l,r,k)=\begin{cases}r+1,&l=1 \\l-1,&r=n\\r+1,&r-k<k-l\\l-1,&r-k>k-l\\\end{cases} \]

初始化对于所有 \(s_i\le 0\) 的位置 \(dp[i][i][w(i,i,i)=i-1][w(i,i,i)=i+1]=1\) ,因为这些位置不受得分序列的限制。

答案即为 \(dp_{1,n,0,1}\)

posted @ 2025-08-22 23:27  xtp  阅读(16)  评论(0)    收藏  举报