题解:水题,只需要先排列end 的时间,以此作为循环的条件基础,从0点开始,不断加上所需时间,如果超出end要求时间,则在之前加上的所需时间里挑出最大的减去,即可获得最多的工作。ps:结构体中的bool很重要,许多认识一下。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
using namespace std;
struct node
{
int s;
int e;
bool operator < (const node a) const {
return s < a.s;
}
}p[800050];
bool cmp(node s,node e)
{
return s.e<e.e;
}
int main()
{
int q;
cin>>q;
while(q--)
{int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>p[i].s>>p[i].e;
}
sort(p,p+n,cmp);
int x=0;
int zong=0;
priority_queue<node>xuexi;
for(int i=0;i<n;i++)
{
x=x+p[i].s;
xuexi.push(p[i]);
zong++;
if(x>p[i].e)
{
node t=xuexi.top();
xuexi.pop();
zong--;
x=x-t.s;
}
}
printf("%d\n",zong);
if(q) printf("\n");
}
}