【Atcoder Regular Contest 085F】 NRE

58 篇文章 0 订阅

Description

设有一长度为n的初始每个位置均为0的序列A。再给定一个长度为n的01序列B。
有Q个特殊的区间[li,ri],你可以选择将A中li到ri这些位置都变为1,当然你可以选择不变。
现在你需要最小化A,B的海明距离。即最小化对应数值不同的位置数目。
这里写图片描述

Analysis

ans=i[a0b1]+[a1b0] (用 axby 表示 a[i]=xb[i]=y
=i[a0b1]+b0(i[a0b0])
f[i]=min(1<=ii[a0b1][a0b0]) ,答案即为f[n]+sum{b0}
考虑到a1已经没有用了,所以区间覆盖相当于整段跳过
我们只能按左端点排序,区间左端点往右端点转移,这样才能保证转移到的后面状态的值,一定是跳过了某段区间而转移过去的
如下

for(int i=1; i<=n; ++i)  
    {  
        for(int k=0;k<v[i].size();k++)  
        { 
            int j=v[i][k];
            int mi = dp[i-1];  
            for(int o=max(i-1,1);o<=j;++o)
                mi=min(mi,dp[o]);
            //mi = min(mi, query(max(i-1,1), j, 1, n, 1));  
            if(mi < dp[j])
            {  
                dp[j] = mi;  
                //update(j, mi, 1, n, 1);  
            }  
        }  
        dp[i] = min(dp[i], dp[i-1]+cost[i]);
    }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值