#include<bits/stdc++.h>
using namespace std;
using VI = vector<int>;
using ll = long long;
using PII = pair<ll,ll>;
const ll mod = 998244353;
int n;
int main(){
cin>>n;
vector<PII>q;
for(int i = 0 ; i < n ; i++){
ll x,y;
cin>>x>>y;
q.push_back({x,x+y});
}
sort(q.begin() , q.end());
priority_queue<ll , vector<ll> ,greater<ll>>pq;
int j = 0;
ll now = 1;
int res = 0;
while(j < n || pq.size()){
if(!pq.size() && q[j].first >= now && j < n){ //如果没有可操作的物品,就拿出一个物品
now = q[j].first;
pq.push(q[j].second);
j++;
}
while(j < n && q[j].first <= now){//把所有可操作的物品加入
pq.push(q[j].second);
j++;
}
//auto x = pq.top();
while(pq.size() && pq.top() < now)pq.pop();//去掉不可操作的物品
if(pq.size()){
pq.pop();//更新答案
now++;
res++;
}
}
cout<<res;
}
贪心策略是当前可做的所有物品中,选择结束时间最早的,
直接排序后每次选前面的做并不正确
1 100
1 100
1 100
2 1
1.如果现在处于待机状态,没有可做的,就直接跳转时间到下一个可做的地方
2.将当前时间下,所以可做的都加入进来,
3.将已经超时且未作的出堆,没机会做了
4.拿出堆顶,(当前可做且时间最早的),更新时间和答案