zoukankan      html  css  js  c++  java
  • $Poj2376 Poj3171 Luogu4644 Cleaning Shifts$ 数据结构优化$DP$

    $Poj$    $AcWing$    $Luogu$
    $ps:$洛谷题目与$Poj$略有不同,以下$Description$是$Poj$版.题目的不同之处在于洛谷中雇用奶牛的费用不相同,所以不可以用贪心法,只能$DP$

    $Description$

    $Sol$

    就是区间覆盖问题$qwq!$

    1.$DP$做!

    $F[i]$表示覆盖$[1,i]$所需要的最小牛个数

    把牛的工作时间按照右端点(结束时间)r[i]从小到大排序,按顺序扫描这些牛.设当前为第$i$头牛,则:

    $F[r[i]]=(min_{l_i-1<=j<r_i}^{ }F[j])+1$

    $F[0]=0$,其余初始化为+∞

    算法导练: 带修改的区间最值问题$???$线段树$!!!$

    2.贪心做!

    比$DP$好写多了,$DP$还要写线段树...

    首先是排序,把所有的区间按照右端点从小到大排序,按顺序扫描这些区间.

    简单来说把答案区间依次存在队列中,如果当前区间可以替代队尾区间就删掉队尾,重复循环($while$),然后在把当前区间加入区间

    那么怎样的叫可以替代呢,就是当前区间的左端点小于或者等于队尾的前一个区间的右端点加$1$就合法,这样保证了每个点都被覆盖到,满足上述条件,且当前区间比队尾区间的右端点更大(或等),所以当前区间一定更优.

    细节:在从左到右扫描区间的过程中,若队尾区间的右端点已经$>=T$,那么一定要跳出循环,否则答案可能偏大

    $Code$

    #include<bits/stdc++.h>
    #define il inline
    #define Rg register
    #define go(i,a,b) for(Rg int i=a;i<=b;i++)
    #define yes(i,a,b) for(Rg int i=a;i>=b;i--)
    using namespace std;
    il int read()
    {
        int x=0,y=1;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
        return x*y;
    }
    int n,t,p,minl=1e9,maxr;
    struct node{int l,r,k;}a[25010],as[25010];
    il bool cmp(node x,node y){if(x.r==y.r)return x.l<y.l;return x.r<y.r;}
    int main()
    {
        n=read(),t=read();
        go(i,1,n){a[i]=(node){read(),read()};minl=min(minl,a[i].l),maxr=max(maxr,a[i].r);}
        if(minl>1 || maxr<t){printf("-1
    ");return 0;}
        sort(a+1,a+n+1,cmp);
        bool fl=0;
        go(i,1,n)
        {
            if(as[p].r>=t)break;
            while(p && as[p].k>=a[i].l)p--;
            if(a[i].l<=as[p].r+1){as[++p]=a[i];as[p].k=as[p-1].r+1;}
        }
        if(as[p].r>=t)printf("%d
    ",p);
        else printf("-1");
        return 0;
    }
    贪心 code
    光伴随的阴影
  • 相关阅读:
    git使用总结
    将本地项目上传到git
    ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常
    SQLQueryStress
    SQL Server 触发器
    HTTP 错误 404.3
    HTTP 错误 500.19 Internal Server Error的解决方法
    windows server 2012 配置多用户ftp服务器配置注意点
    自定义Remote验证(对博客园文章“Asp.net MVC验证哪些事(3)-- Remote验证及其改进(附源码)”自定义验证的改进)
    [ASP.net教程]IIS服务器 远程发布(Web Deploy)配置
  • 原文地址:https://www.cnblogs.com/forward777/p/11264398.html
Copyright © 2011-2022 走看看