首页 > 其他 > 详细

bzoj3711Druzyny

时间:2019-02-10 21:54:05      阅读:196      评论:0      收藏:0      [点我收藏+]

体育课上,n个小朋友排成一行(从1到n编号),老师想把他们分成若干组,每一组都包含编号连续的一段小朋友,每个小朋友属于且仅属于一个组。
第i个小朋友希望它所在的组的人数不多于d[i],不少于c[i],否则他就会不满意。
在所有小朋友都满意的前提下,求可以分成的组的数目的最大值,以及有多少种分组方案能达到最大值。

 

朴素dp方程并不难,dp[i]表示到第i个人正好划分成dp[i]组,可以从一定范围内满足条件的j(j<i)通过dp[i]=max(dp[j-1]+1)得到

这样的复杂度是n^3

可以用分治优化dp

每层分治(以solve(l,r)表示)不能无脑地以中点作为划分

而是要找到一个以l到r C最大的点作为划分点k

我们每层分治的任务就是处理l-->k对k-->r的贡献(0到l-1的已经处理过了)

 

bzoj3711Druzyny

原文:https://www.cnblogs.com/lnxcj/p/10360276.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!