P3648 [APIO2014]序列分割
分析
这道题也是一个分层斜率优化 dp,但是一眼看上去毫无头绪,我们会发现每一次操作的位置可以在上一次操作之前。但是我们来推一下:有三个数 $a,b,c$,如果我们先分开 $a,b$,再分开 $b.c$,得到的结果为 $a \times b+(a+b) \times c=a\times b+b\times c+c\times a$;如果我们先分开 $b,c$,再分开 $a,b$,得到的结果为 $b \times c+(b+c) \times a=a\times b+b\times c+c\times a$。这两种情况的结果是一样的,说明最终结果与切的顺序无关,只与切的位置有关。我们就假设切的位置递增,就可以用斜率优化 dp 了,$f[i]$ 表示最后一次切的位置是 $i-1$ 与 $i$ 即可。
另外,这道题要求求出最优情况的方案,我们只需要用一个 $h$ 数组来记录,$h[i][j]$ 表示切了 $i$ 次,最后一次切的位置是$j-1$ 与 $j$ 的情况中上一个切的位置。由于这里不管顺序,最后直接倒序输出也可以。
code
1 |
|
相关文章