给定一个数组a1...ana_1...a_na1...an满足n≤105n \leq 10^5n≤105,ai≤9a_i \leq 9ai≤9
再给定一个数组bib_ibi满足bi≤109b_i \leq 10^9bi≤109,表示aia_iai的编号。
问将数组划分成k(k≤20)k(k \leq 20)k(k≤20)段,段不能为空,每段的贡献之和的最小值是多少?
每段的贡献: 将段内编号相同的数aia_iai合并(相加,假设a1=2a_1=2a1=2、a2=3a_2=3a2=3、a3=5a_3=5a3=5编号相同,那么他们合并起来就是101010),贡献就是合并之后的数的平方和。例如合并之后为101010、232323,贡献就是102+232=62910^2+23^2=629102+232=629
需要一个O(nk)\mathcal{O}(nk)O(nk)或O(knlogn)\mathcal{O}(kn \log n)O(knlogn)的算法。