Array Splitting
题意
将一个长度为 $n$ 的序列 $a_i$ 顺序不变的分为非空的 $k$ 部分, 设 $f(i)$ 表示 $a_i$ 在第 $f(i)$ 部分
求 $\sum\limits_{i=1}^na_i*f(i)$
题解
在 $[1,n]$ 中选 $k$ 个点 $b_i$ (其中一个为 1)将序列分为 $k$ 份, 答案为 $\sum\limits_{i=1}^ksuf[i]$ , $suf[i]$ 表示从 $i$ 开始的后缀和
所以直接对后缀排序, 取最大的 $k$ 个
代码
1 | int a[N]; |