题目:
分析:还是不会。看题解:
很简单。
相当于一个背包。
首先按照维修截止时间来排序。
之后发现下一个维修不了了,与之前在维修队列里面的最大值进行比较。
在已有序队列里插入一个,使得仍然有序,那么何不考虑优先队列,而且默认是从大到小排序的。
代码:
#include<bits/stdc++.h>
using namespace std;
int m;
struct node{
int n1,n2;
} nn[150000];
bool cmp(struct node nn1,struct node nn2)
{
return nn1.n2<nn2.n2;
}
priority_queue<int> q;
int main()
{
cin>>m;
for(int i=0;i<m;i++)
{
cin>>nn[i].n1>>nn[i].n2;
}
sort(nn,nn+m,cmp);
int sum=0;
for(int i=0;i<m;i++)
{
if(sum+nn[i].n1<nn[i].n2)
{
sum+=nn[i].n1;
q.push(nn[i].n1);
continue;
}
int c=q.top();
if(c<=nn[i].n1) continue;
q.pop();
q.push(nn[i].n1);
sum+=(-c+nn[i].n1);
}
cout<<q.size();
}