当前位置: 代码迷 >> 综合 >> 2019多校第三场 HDU6606 Distribution of books(二分,权值线段树维护,DP)
  详细解决方案

2019多校第三场 HDU6606 Distribution of books(二分,权值线段树维护,DP)

热度:38   发布时间:2023-12-09 20:19:29.0

链接: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 &ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace;&ThickSpace; ( 0 ≤ j &lt; i , s u m [ i ] ? s u m [ j ] ≤ x ) dp[i]=max\{dp[j]\}+1\;\;\;\;\;(0\le j&lt;i,sum[i]-sum[j]\le x) dp[i]=max{ dp[j]}+1(0j<i,sum[i]?sum[j]x)
若最后存在 d p [ i ] ≥ k dp[i]\ge k dp[i]k,说明 x x x是可能的答案,否则不可能是答案。

x x x满足该条件,那 &gt; x \gt x >x的数肯定满足该条件,答案只有可能 ≤ x \le x