前言
那么什么是反悔贪心呢
传送门 :
思路
这题可以抽象成为
左端点为 c i c_i ci 长度为 w i w_i wi 求区间最多且区间和最小的和
如果直接贪心的话是不正确的,因为不清楚目前最优解是否
最优优解,所以我们可以通过大根堆来维护每一次的最优解,
如果存在可以更新答案的,我们就通过大根堆返回来做即可
CODE
struct node{
int len ,r;
}a[N];
bool cmp(node x,node y)
{
return x.r<y.r;
}
int f[N];
int num,sum;
priority_queue<int> q;
void cal()
{
}
void solve()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].r>>a[i].len;
a[i].r+=a[i].len;
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++)
{
if(sum+a[i].len<=a[i].r)
{
num++;
sum+=a[i].len;
q.push(a[i].len);
}else if(q.top()>a[i].len)
{
sum -=q.top();
q.pop();
q.push(a[i].len);
sum+=a[i].len;
}
}
cout<<num<<endl;
cout<<sum<<endl;
}