• BZOJ 1029 [JSOI2007]建筑抢修


    按照t2从小到大排列之后贪心。

    若当前任务可以插入,则插入。

    若当前任务不可以插入,分两种情况:

    ①当前任务的耗时大于等于之前插入的任务的最大耗时:跳过当前任务

    ②当前任务的耗时小于之前插入的任务的耗时:将最前插入的耗时最大的那个任务删除,插入当前任务

    此过程用堆维护~

    View Code
     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cstdio>
     5 #include <algorithm>
     6 
     7 #define N 1000000
     8 #define INF 1LL<<60
     9 
    10 using namespace std;
    11 
    12 struct HP
    13 {
    14     long long t1,t2;
    15 }hp[N],px[N];
    16 
    17 int n,sz;
    18 long long fin;
    19 
    20 inline bool cmppx(const HP &a,const HP &b)
    21 {
    22     if(a.t2!=b.t2) return a.t2<b.t2;
    23     return a.t1<b.t1;
    24 }
    25 
    26 inline bool cmphp(const HP &a,const HP &b)
    27 {
    28     return a.t1<b.t1;
    29 }
    30 
    31 inline void read()
    32 {
    33     scanf("%d",&n);
    34     for(int i=1;i<=n;i++) scanf("%lld%lld",&px[i].t1,&px[i].t2);
    35     sort(px+1,px+1+n,cmppx);
    36 }
    37 
    38 inline void go()
    39 {
    40     for(int i=1;i<=n;i++)
    41     {
    42         if(px[i].t1+fin<=px[i].t2)
    43         {
    44             hp[++sz]=px[i];
    45             push_heap(hp+1,hp+1+sz,cmphp);
    46             fin+=px[i].t1;
    47         }
    48         else if(sz!=0)
    49         {
    50             HP sta=hp[1];
    51             if(px[i].t1>=sta.t1) continue;
    52             pop_heap(hp+1,hp+1+sz,cmphp);
    53             hp[sz]=px[i];
    54             push_heap(hp+1,hp+1+sz,cmphp);
    55             fin-=sta.t1-px[i].t1;
    56         }
    57     }
    58     printf("%d\n",sz);
    59 }
    60 
    61 int main()
    62 {
    63     read();
    64     go();
    65     return 0;
    66 } 
  • 相关阅读:
    Hive_进阶
    日志分析_统计每日各时段的的PV,UV
    Sqoop_mysql,hive,hdfs导入导出操作
    Sqoop_ 简单介绍
    Sqoop_ 从 hive 导到mysql常遇九问题总结(转)
    MySql_设置编码
    Linux_MySql_yum_安装
    Hive_DDL与DML
    UI自动化持续化集成
    HDU 5073 数学题
  • 原文地址:https://www.cnblogs.com/proverbs/p/2867055.html
Copyright © 2020-2023  润新知