传送门
题意简述:给一个
n
n
n个数的数列,你可以把它最多分成
m
m
m段,求每段数之和的最大值的最小值,以及满足这个最小值的时候划分数列的方案数。
思路:第一个问题是二分经典问题,不妨设其答案为
l
i
m
lim
lim。
现在考虑
d
p
dp
dp第二个问题。
我们定义状态
f
i
,
j
f_{i,j}
fi,j表示把前
i
i
i个数划成
j
j
j段且满足题意的方案数。
那么就有状态转移方程:
f
i
,
j
=
∑
p
s
u
m
(
p
,
i
)
≤
l
i
m
f
p
−
1
,
j
−
1
f_{i,j}=\sum_{p}^{sum(p,i)\le lim}f_{p-1,j-1}
fi,j=∑psum(p,i)≤limfp−1,j−1,然后发现从左到右每个位置对应的
p
m
i
n
p_{min}
pmin是单调不降的,于是我们用类似双端队列的思想维护一下等式右边的和即可。
代码