亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

BZOJ 1029: [JSOI2007]建筑搶修 貪心

系統 1602 0

題目鏈接: http://www.lydsy.com/JudgeOnline/problem.php?id=1029

小剛在玩JSOI提供的一個稱之為“建筑搶修”的電腦游戲:經過了一場激烈的戰斗,T部落消滅了所有z部落的入侵者。但是T部落的基地里已經有N個建筑設施受到了嚴重的損傷,如果不盡快修復的話,這些建筑設施將會完全毀壞。現在的情況是:T部落基地里只有一個修理工人,雖然他能瞬間到達任何一個建筑,但是修復每個建筑都需要一定的時間。同時,修理工人修理完一個建筑才能修理下一個建筑,不能同時修理多個建筑。如果某個建筑在一段時間之內沒有完全修理完畢,這個建筑就報廢了。你的任務是幫小剛合理的制訂一個修理順序,以搶修盡可能多的建筑。

Input

第一行是一個整數N,接下來N行每行兩個整數T1,T2描述一個建筑:修理這個建筑需要T1秒,如果在T2秒之內還沒有修理完成,這個建筑就報廢了。

Output

輸出一個整數S,表示最多可以搶修S個建筑。 數據范圍: N<150000

算法分析:首先貪心排序一下,優先選擇更早修理完成的建筑(即優先選擇T2小的),本以為這樣就可以了,交了幾次都WA了,仔細想了想,如果當前這個建筑來不及修好,可是之前修好的建筑里面有一個建筑修理時間比它長,那么我們放棄修理原來那個修理時間長的,轉而修理當前這個建筑,那么,在當前修理建筑個數不變的情況下,用的時間會更少,于是,用優先隊列保存一下原來修好了的建筑修理時間,然后,跟著上面那個思想處理一下就OK了。

        
           1
        
         #include<iostream>


        
           2
        
         #include<cstdio>


        
           3
        
         #include<cstring>


        
           4
        
         #include<cstdlib>


        
           5
        
         #include<cmath>


        
           6
        
         #include<algorithm>


        
           7
        
         #include<queue>


        
           8
        
        
          #define
        
         inf 0x7fffffff


        
           9
        
        
          using
        
        
          namespace
        
        
           std;


        
        
          10
        
        
          const
        
        
          int
        
         maxn=
        
          150000
        
        +
        
          100
        
        
          ;


        
        
          11
        
        
          12
        
        
          int
        
        
           n;


        
        
          13
        
        
          struct
        
        
           node


        
        
          14
        
        
          {


        
        
          15
        
        
          int
        
        
           num,r;


        
        
          16
        
             friend 
        
          bool
        
        
          operator
        
         <
        
           (node a,node b)


        
        
          17
        
        
              {


        
        
          18
        
        
          return
        
         a.r<
        
          b.r;


        
        
          19
        
        
              }


        
        
          20
        
        
          }an[maxn];


        
        
          21
        
        
          22
        
         priority_queue<
        
          int
        
        >
        
           Q;


        
        
          23
        
        
          int
        
        
           main()


        
        
          24
        
        
          {


        
        
          25
        
        
          while
        
         (scanf(
        
          "
        
        
          %d
        
        
          "
        
        ,&n)!=
        
          EOF)


        
        
          26
        
        
              {


        
        
          27
        
        
          for
        
         (
        
          int
        
         i=
        
          0
        
         ;i<n ;i++) scanf(
        
          "
        
        
          %d%d
        
        
          "
        
        ,&an[i].num,&
        
          an[i].r);


        
        
          28
        
                 sort(an,an+
        
          n);


        
        
          29
        
        
          while
        
         (!
        
          Q.empty()) Q.pop() ;


        
        
          30
        
        
          int
        
         ans=
        
          0
        
        ,e=
        
          0
        
        
          ;


        
        
          31
        
        
          for
        
         (
        
          int
        
         i=
        
          0
        
         ;i<n ;i++
        
          )


        
        
          32
        
        
                  {


        
        
          33
        
        
          if
        
         (an[i].r-an[i].num+
        
          1
        
        >
        
          e)


        
        
          34
        
        
                      {


        
        
          35
        
                         e +=
        
           an[i].num;


        
        
          36
        
        
                          Q.push(an[i].num);


        
        
          37
        
                         ans++
        
          ;


        
        
          38
        
        
                      }


        
        
          39
        
        
          else
        
        
          40
        
        
                      {


        
        
          41
        
        
          if
        
         (Q.empty()) 
        
          continue
        
        
          ;


        
        
          42
        
        
          int
        
         t=
        
          Q.top() ;


        
        
          43
        
        
          if
        
         (t>
        
          an[i].num)


        
        
          44
        
        
                          {


        
        
          45
        
                             e -= t ;e +=
        
           an[i].num;


        
        
          46
        
        
                              Q.pop() ;Q.push(an[i].num);


        
        
          47
        
        
                          }


        
        
          48
        
        
                      }


        
        
          49
        
        
                  }


        
        
          50
        
                 printf(
        
          "
        
        
          %d\n
        
        
          "
        
        
          ,ans);


        
        
          51
        
        
              }


        
        
          52
        
        
          return
        
        
          0
        
        
          ;


        
        
          53
        
         }
      

?

BZOJ 1029: [JSOI2007]建筑搶修 貪心


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美日韩亚洲国产一区二区三区 | 香港一级a毛片在线播放 | 一级不卡毛片 | 久久精品免费全国观看国产 | 中文字幕免费在线观看 | 午夜性色福利视频在线视频 | 国产精品第8页 | 国产精品手机视频 | 最新国产麻豆精品 | 九九视频只有精品六 | 色欧美在线 | 欧美孕妇乱大交xxxxx | 在线精品国内视频秒播 | 国产成人精品久久一区二区小说 | 天天干天天拍天天操 | 国产精品久久久久影视青草 | 国产精品夜色视频一级区 | 亚洲人成在线精品不卡网 | 久久亚洲国产成人精品性色 | 手机免费在线观看 | 亚洲成年网站 | 亚洲欧洲日韩国产aa色大片 | 中文字幕一区二区区免 | 国产精品久久精品福利网站 | 久久国产免费福利永久 | 一级毛片特黄久久免费看 | 青青青在线视频播放免费 | 亚洲深夜在线 | 99在线观看精品视频 | 伊人网站在线观看 | 色播久久| 97av麻豆蜜桃一区二区 | 中文字幕日韩女同互慰视频 | 欧美日韩在线视频 | 天天操天天插 | 美日韩在线视频 | 四虎影视在线影院4hu | 俄罗斯一级毛片免费播放 | 日韩欧美第一区二区三区 | 欧美成人禁片在线www | 欧美精品免费在线观看 |