P16416 【MX-X28-T5】「FAOI-R12」单人旅行

一开始没理解其他题解的意思,最后终于明白了,感觉也是不难的,写篇题解补充一点。


首先考虑 \(t\) 在每次操作的时候会怎么样子,肯定都是成这样的值域:对于前 \(i\) 个数,这堆数都是在 \([1,i]\) 这个值域里面的,然后空着 \(i+1\) 因为连续的 \(c\) 的限制导致的,后面就是 \([i+2,j]\) 的值域了。

那么考虑 \(f_{i,j}\) 表示已经构成了 \([1,i]\) 了,且有 \(j\)连续,这个连续的意思是:例如填 \([l,r]\) 的时候我们先填 \([l+1,r]\) 然后再填 \(l\),是 \(c\) 的意义上的连续,分成了 \(j\) 段。

然后转移的时候并不好转移,因为那个不一样的 \(c\) 不确定,所以直接减去这个方案也就是容斥掉,那么这个 \(f_{i,j}\) 就能做出来了。

可能数组定义有点不一样吧。

::::success[Part]

f[l][r] 就是 [l,r] 操作的**连续**产生的价值
rep(i, 0, n - 1) rep(j, 0, i)
    rep(k, i + 1, min(n, i + tot[i + 1] + 1))
(dp[k][j] -= 1ll 
* dp[i][j] 
* P(tot[i + 1], k - i) % mod 
* f[i + 1][k] % mod) %= mod,

(dp[k][j + 1] += 1ll 
* dp[i][j] 
* P(tot[i + 1], k - i - 1) % mod 
* f[i + 1][k] % mod) %= mod;

::::

最后统计答案的时候也是好做的。

::::success[\(\mathscr{Code:}\)]
看别人的吧。
::::

posted @ 2026-08-18 15:03  static_inline  阅读(2)  评论(0)    收藏  举报