链接:HDU6606 Distribution of books
题意:
将一个长度为n的序列a[1]、a[2]、… 、a[n], 要求取前k段(要求各段连续,但不可交叉,每段元素个数≥1),使得最大的那段和最小,并输出该和。
1 <= n <= 2*105
1 <= k <= n
-109 <= ai <= 109
分析:
先求下前缀 s u m sum sum,再二分得到答案,对于可能的答案x,利用dp进行验证。
d p [ i ] : dp[i]: dp[i]:表示 前 i i i个数 可以得到的 最多 符合条件 的 段数
d p [ i ] = m a x { d p [ j ] } + 1            ( 0 ≤ j < i , s u m [ i ] ? s u m [ j ] ≤ x ) dp[i]=max\{dp[j]\}+1\;\;\;\;\;(0\le j<i,sum[i]-sum[j]\le x) dp[i]=max{
dp[j]}+1(0≤j<i,sum[i]?sum[j]≤x)
若最后存在 d p [ i ] ≥ k dp[i]\ge k dp[i]≥k,说明 x x x是可能的答案,否则不可能是答案。
若 x x x满足该条件,那 > x \gt x >x的数肯定满足该条件,答案只有可能 ≤ x \le x ≤