1. 程式人生 > 其它 >P4053 [JSOI2007]建築搶修題解--zhengjun

P4053 [JSOI2007]建築搶修題解--zhengjun

技術標籤:洛谷優先順序佇列

首先,我們可以貪心一下,把報廢的時間按升序排序。

然後每到一個建築,如果這個建築可以修,那麼就修了它。

如果不能修,那麼就要看了,如果已經修了一個修築時間大於當前不能修的建築的修築時間,那麼顯然是選當前這個好一點。

程式碼

#include<cstdio>
#include<queue>
#include<algorithm>
#define ll long long
using namespace std;
struct zj{
    ll a,b;
    bool operator < (const zj &
x)const{ return b<x.b; } }a[1500001]; int n,ans,now; priority_queue<int>q; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d%d",&a[i].a,&a[i].b); } sort(a+1,a+1+n); for(int i=1;i<=n;i++){ if(now+a[i]
.a<=a[i].b){ q.push(a[i].a); now+=a[i].a; ans++; } else if(q.top()>a[i].a){ now-=q.top(); q.pop(); now+=a[i].a; q.push(a[i].a); } } printf("%d",ans); return 0; }