题目大意:
将n个数分为m段,每段权值为数值相同的数对数量。求最小权值和。
题目解法:
还是一道分治优化dp。分治优化的具体内容详见划分数组1的题解。这里直接考虑怎么算w(a,b)。
用数组cnt记录一个区间内各个数字出现的次数。显然如果我们知道了一个区间[a,b]的cnt和权值,我们就可以O(1)得到[a±1,b],[a,b±1]的相关信息。
首先对于每个solve(l,r,optl,optr),如果我们已经知道了(optl,l]的信息,我们就可以通过上述方法得到(optl,mid]的信息,然后通过左端点右移得到(optl~optr,mid]的信息。这两个操作的复杂度都是区间长度这个级别的。
然后显然我们每次solve前预处理好该(optl,l]也是可以在区间长度的复杂度解决的(因为我们的左端点总是和决策点有关右端点总是和数组下标有关所有加减操作都可以控制在当前solve给定的区间里)
然后然后记得这种递归一定一定要回溯。
原文地址:https://www.cnblogs.com/myrcella/p/12940504.html