zoukankan      html  css  js  c++  java
  • JSOI2007 建筑抢修(贪心)

    满分做法:

    按照结束时间从小到大排序,一个一个进行处理。遇到当前时间+处理时间>结束时间的建筑时,把这个建筑和之前修理过的建筑中处理时间最大的进行比较。

    如果当前处理时间小于最大值,那么可以进行替换,使当前时间变小,否则就放弃此建筑。剩下的就是直接加进来就可以了。

    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<queue>
    #include<vector>
    using namespace std;
    typedef long long ll;
    const int maxm=150007;
    int n;
    struct node
    {
     ll t,ed;
     bool operator < (const node &s) const
     {
     	return ed<s.ed;
     }
    }a[maxm];
    priority_queue<ll>q;
    ll k=1;
    int ans; 
    int main()
    {
     scanf("%d",&n);
     for(int i=1;i<=n;i++)
     scanf("%lld%lld",&a[i].t,&a[i].ed);
     sort(a+1,a+n+1); 
     for(int i=1;i<=n;i++)
     {
       if(k+a[i].t>a[i].ed)
       {
       	if(a[i].t<q.top())//找之前最大的且小于这个值的进行替换 
    	{ 
         k-=q.top();
         q.pop();
         k+=a[i].t;
         q.push(a[i].t);
        }
       }
       else
       {
       	 k+=a[i].t;
       	 ans++;
       	 q.push(a[i].t);
       }
     }
     printf("%d
    ",ans);
     return 0;
    }
    
  • 相关阅读:
    Ajax(三)
    Ajax(二)
    Django(四)
    Ajax(一)
    Django(三)
    Django(二)
    Django(一)
    Http协议
    Bootstrap
    python 绑定方法
  • 原文地址:https://www.cnblogs.com/lihan123/p/11674069.html
Copyright © 2011-2022 走看看