标签:algo lse amp 小根堆 限制 sign fine 替换 sch
for(int i=1;i<=n;++i)
{
if(a[i].d<=q.size())//即是当前这个任务在限制时间内无法完成。
{
//那么就在前面找到价值比当前的任务小的价值最小的任务,将其替换。
}
else
{
//直接塞入储存任务的数组
++time_now;
}
}
for(int i=1;i<=n;++i)
{
if(a[i].d<=q.size())
{
if(a[i].p>q.top().p)
{
ans+=a[i].p-q.top().p;
q.pop();
q.push(a[i]);
}
}
else
{
ans+=a[i].p;
q.push(a[i]);
}
}
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
#define int long long
struct Work
{
int d,p;
bool operator > (const Work a) const
{
return p<a.p;
}
bool operator < (const Work a) const
{
return p>a.p;
}
};
Work a[1000005];
bool cmp(Work a,Work b)
{
return a.d<b.d;
}
priority_queue <Work> q;
int n,ans=0;
signed main()
{
scanf("%lld",&n);
for(int i=1;i<=n;++i)
{
scanf("%lld%lld",&a[i].d,&a[i].p);
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;++i)
{
if(a[i].d<=q.size())
{
if(a[i].p>q.top().p)
{
ans+=a[i].p-q.top().p;
q.pop();
q.push(a[i]);
}
}
else
{
ans+=a[i].p;
q.push(a[i]);
}
}
printf("%lld",ans);
return 0;
}
题解 P2949 【[USACO09OPEN]工作调度Work Scheduling】
标签:algo lse amp 小根堆 限制 sign fine 替换 sch
原文地址:https://www.cnblogs.com/Point-King/p/9848916.html