码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj2298 [HAOI2011]problem a

时间:2020-02-24 00:08:44      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:style   tps   end   pac   turn   include   get   text   要求   

题目描述

题解

考虑到每个人说的话可以锁定一个区间内的成绩是相同的。所以问题就转化成了给定一些有权值的区间,要求选出若干无交集区间使其权值和最大, $\text{dp}$ 即可。

代码

#include <bits/stdc++.h>
using namespace std;
int n,m,f[100005];
struct O{int l,r;}g[100005];
bool cmp(O A,O B){
    return A.r==B.r?A.l<B.l:A.r<B.r;
}
int main(){
    cin>>n;
    for (int i=1,l,r;i<=n;i++){
        scanf("%d%d",&l,&r);
        l++;r=n-r;if (l>r) continue;
        g[++m]=(O){l,r};
    }
    sort(g+1,g+m+1,cmp);
    for (int i=1,j=0,l,r,k=0;i<=m;i=j+1){
        l=g[i].l;r=g[i].r;
        while(k<r) f[k+1]=f[k],k++;
        while(j<m && g[j+1].l==l && g[j+1].r==r) j++;
        f[r]=max(f[r],f[l-1]+min(r-l,j-i)+1);
    }
    cout<<n-f[n]<<endl;return 0;
}

 

bzoj2298 [HAOI2011]problem a

标签:style   tps   end   pac   turn   include   get   text   要求   

原文地址:https://www.cnblogs.com/xjqxjq/p/12354943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!