建筑抢修

[JSOI2007]建筑抢修

https://ac.nowcoder.com/acm/problem/20154

//贪心
#include <bits/stdc++.h>

#define maxn 0x3f3f3f3f
using namespace std;

typedef long long ll;

priority_queue<int, vector<int >, less<int > > q; //建大根堆

struct jian
{
    ll tt,d;//定义耗时和截止时间
}t[200000];

bool cmp(jian a,jian b) // 假先修截止时间早的
{
    if(a.d!=b.d)    return a.d<b.d;
    else return a.tt<b.tt;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);

    int n;
    ll sum=0; // 定义总耗时
    cin>>n;

    for(int i=1;i<=n;i++)
        cin>>t[i].tt>>t[i].d;

    sort(t+1,t+1+n,cmp);

    for(int i=1;i<=n;i++)
    {
        sum+=t[i].tt;
        q.push(t[i].tt);
        if( sum >t[i].d) // 如果时间不够了,去掉耗时最大的
        {
            sum-=q.top();
            q.pop();
        }
    }
    cout<<q.size()<<endl;
}
全部评论

相关推荐

八极星:有什么不能问的,(/_\),这又不是多珍贵的机会,你有什么可失去的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务