洛谷 P1564 膜拜 线性dp min型

P1564 膜拜   线性dp  min型

题意:

软件22-3班有两位大佬,宋佬和谷神,每个acmer都发自内心的膜拜其中一位,现在acmer 要去训练了,训练机房内需要保证整个机房都是一位大佬的追随者,或者两位大佬追随者人数差不超过m,否则他们会互殴,现在n个acmer排成一排,yao比较笨,只会将连续一段的同学分入一个机房,那么最少需要多少个机房呢

分析:

在输入的时候把2改成-1,这样1代表追随宋佬,2代表追随谷神,同时处理前缀和数组,f[ I ]存的是前i个人最少需要用多少个机房,那么如果前缀和sum[ I ]-sum[ j ]符合分房间的条件(绝对值小于M,或者i到j都相同),f[ I ]=min( f[ I ] ,f[ j ]+1)

代码:
 

//dp[i]表示前i个人所需的最少机房数。
//前缀和+差分思想。
//if(abs(sum[i]-sum[j-1]==i-j+1)),说明i到j都相同
//if(abs(sum[i]-sum[j-1]<=m)),i和j之间的不同人数差不超过m 
//在符合以上两个条件下,转移方程:dp[i]=min(dp[i],dp[j-1]+1) 
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=i;j++)
        {
            if(abs(sum[i]-sum[j-1])==i-j+1||abs(sum[i]-sum[j-1])<=m)
            {
                dp[i]=min(dp[i],dp[j-1]+1);}}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值