题目
一个长度为
n 的数组
a ,从左到右分段,记第
i 段和为 ,
si=∑j=liriai ,要求
si−1≤si (i>1) ,记权值和
W=∑si2,求
Wmin
部分分做法
12opt
枚举分段点然后检验
时间复杂度
O(2nn)
24opt
可以各种
Dp ,主要是水篇幅
fi,j: 前
i 个数,最后一段的和为
j 目前最小和
fi,j=min{fk,q+j2}(j=si−sk)
暴力枚举
O(n2m2) 再注意一下范围卡卡常
36opt
fi,j 前
i 个数,最后一段为
(j,i] 的目前最小和
fi,j=min{fj,k+(si−sj)2}
sj−sk≤si−sj
O(n3)
我们可以尝试对
24opt 的枚举进行优化
fi,j=min{fk,q+j2}(j=si−sk)
先枚举
k ,再向两边同时拓展,并且记录
fk,q 最小值
时间复杂度
O(n2m)
64opt
fi,j=min{fj,k+(si−sj)2}
sj−sk≤si−sj
同样的优化方法优化
O(n3) 得到
O(n2)
开始扯结论
根据
n 元均值不等式可得:
nx1+...+xn≤n∑i=1nxi2
也就是
ns2≤W
当
x1=x2=...=xn 时候取等号
那么分的越平均越优秀
一种调整方法:
设
xa<xb<xc<xd 并且
xa+xd=xb+xc ,那么
xb2+xc2≤xa2+xd2
意味着相邻两段可以通过调整使得值优秀一点
然后就会使相邻的又有机会调整
以此类推,最终调整不行时候就是最优解
那么此时显然有最后一段的划分点离右端点最近
那么尝试有关
dp 决策点的优化
85opt∼100opt
定义
fi 为
i 的最优决策点,那么类似
O(n2) 的有
枚举
i 的决策点
j 来更新
fi
Sj−Sfj≤Si−Sj
移项可得
2∗Sj−Sfj≤Si
发现右边是只和决策点
j 相关的代数式记为
gj=2∗Sj−Sfj
gj 肯定越小越好
考虑两个决策点
k<j 并且
gk>gj 那么永远只会选择
j
也就是可以考虑维护一个单调递增的栈,然后用
Si 去二分
然后发现
Si 也有单调性就可以做到
O(n)