zoukankan      html  css  js  c++  java
  • BZOJ1029: [JSOI2007]建筑抢修

    贪心

    先按结束时间排序,按次序处理。

    如果当前的时间加上需要的时间没有超过结束时间,直接进堆,更新答案;(使最终结果变大)

    而如果超过了,把堆顶取出预制比较,若堆顶所花时间较多,取出堆顶,将当前建筑进堆。(在最终结果不变的情况下,减少总时间)

     1 /**************************************************************
     2     Problem: 1029
     3     User: zhuohan123
     4     Language: C++
     5     Result: Accepted
     6     Time:396 ms
     7     Memory:2844 kb
     8 ****************************************************************/
     9  
    10 #include <iostream>
    11 #include <cstdio>
    12 #include <queue>
    13 #include <algorithm>
    14 using namespace std;
    15 struct T
    16 {
    17     int t1,t2;
    18     friend bool operator<(T a,T b){return a.t2<b.t2;}
    19 }a[151000];
    20 priority_queue<int> q;
    21 int main(int argc, char *argv[])
    22 {
    23     int n;scanf("%d",&n);
    24     for(int i=1;i<=n;i++)scanf("%d%d",&a[i].t1,&a[i].t2);
    25     sort(a+1,a+n+1);
    26     int nowtime=0,ans=0;
    27     for(int i=1;i<=n;i++)
    28     {
    29         if(a[i].t1+nowtime<=a[i].t2)
    30         {
    31             q.push(a[i].t1);
    32             nowtime+=a[i].t1;
    33             ans++;
    34         }
    35         else if(a[i].t1<q.top()&&(a[i].t1+nowtime-q.top())<=a[i].t2)
    36         {
    37             nowtime=nowtime-q.top()+a[i].t1;
    38             q.pop();q.push(a[i].t1);
    39         }
    40     }
    41     printf("%d
    ",ans);
    42     return 0;
    43 }
  • 相关阅读:
    chapter1 Qt入门
    base64加密解密
    vue+CryptoJS+cookie实现保存账号密码
    js计时器
    Elenent ui中的表单校验规则、自定义校验规则、预验证功能
    js获取文件后缀
    js中如何将有字符串转换为数组,或将数组转换为字符串
    vue-router
    Vue项目纯前端导出word文档
    async/await
  • 原文地址:https://www.cnblogs.com/zhuohan123/p/3263230.html
Copyright © 2011-2022 走看看