萌新看不懂题解求助
查看原帖
萌新看不懂题解求助
280800
lingfunny楼主2024/12/30 18:35

fi,jf_{i, j} 表示第 ii 行填 jj 后,前 ii 行贡献的最大值。我们不考虑初始填过的数之间产生的贡献。

ci,jc_{i, j} 表示第 ii 行中 jj 这个数的数量。为了美观,把 ci,1c_{i, -1} 记作 cic_{i}

我们有两个转移:

fi,jfi1,j+ci1×ci,j+(ci1+ci1,j)×ci(这两行填相同数字)fi,jfi1,t+ci1×ci,t+ci1,j×ci(这两行填不同数字)\begin{align*} f_{i, j}&\gets f_{i-1,j} + c_{i-1} \times c_{i, j} + (c_{i-1} + c_{i-1, j}) \times c_{i}& (\text{这两行填相同数字})\\ f_{i, j}&\gets f_{i-1, t} + c_{i-1} \times c_{i, t} + c_{i-1, j} \times c_{i}&(\text{这两行填不同数字}) \end{align*}

确实,对于满足 ci1,j=ci,j=0c_{i-1, j} = c_{i, j} = 0jj,即第 ii 行和第 i1i-1 行都没出现的数,有转移:

fi,jfi1,j+ci1cifi,jfi1,t+ci1×ci,t\begin{align*} f_{i, j} &\gets f_{i-1, j} + c_{i-1}c_{i}\\ f_{i, j} &\gets f_{i-1, t} + c_{i-1} \times c_{i, t} \end{align*}

如果记 a=ci1cia = c_{i-1}c_ib=max1tk(fi1,t+ci1×ci,t)b = \max\limits_{1\le t\le k} \left(f_{i-1, t}+c_{i-1}\times c_{i, t}\right),这些转移是 xmax(x+a,b)x\gets \max(x + a, b),可以用线段树维护 dp 值。

但是怎么快速求 bb 啊?

2024/12/30 18:35
加载中...