zoukankan      html  css  js  c++  java
  • BZOJ1029

    传送门:BZOJ1029

    还记得线段覆盖吗?

    我们将建筑物按Deadline排序,然后扫描排序后数组,假设当前建筑物能够被修建。则修建,否则。假设当前建筑物所用时间小于修过的建筑物最大时间。则放弃最大时间,改修它。
    这个算法的正确性是显然的。


    代码上的小细节见下:

    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    #include <queue>
    using namespace std;
    
    struct Node{
        int Needtime;
        int Deadline;
        bool operator <(const Node& a)const{
            return Deadline<a.Deadline;
        }
    };
    
    Node da[150005];
    int n;
    priority_queue<int> Q;
    
    void Readdata()
    {
        freopen("loli.in","r",stdin);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d%d",&da[i].Needtime,&da[i].Deadline);
    }
    
    void Solve()
    {
        sort(da+1,da+1+n);
        int used=0;Q.push(0);
        for(int i=1;i<=n;i++)
            if(used+da[i].Needtime<=da[i].Deadline){
                Q.push(da[i].Needtime);
                used+=da[i].Needtime;
            }
            else
                if(da[i].Needtime<Q.top()){
                    used+=(da[i].Needtime-Q.top());
                    Q.pop();
                    Q.push(da[i].Needtime);
                }
        printf("%d",Q.size()-1);
    }
    
    void Close()
    {
        fclose(stdin);
        fclose(stdout);
    }
    
    int main()
    {
        Readdata();
        Solve();
        Close();
        return 0;
    }
  • 相关阅读:
    linux-centos7 安装 maven 代码管理工具,以及常见配置
    linux-centos7 安装 jre + tomcat 实现 web 服务器
    python 开发语言 博客目录
    生存分布函数
    债务偿还
    密度聚类算法
    POI兴趣点搜索
    区域地址搜索
    地址之间的距离
    地理坐标转换
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7076513.html
Copyright © 2011-2022 走看看