流水线调度
对于任意两个原件a,b a在m1上的加工时间和b在m2上的加工时间是固定的。可以节省下来的时间就是利用a在m2上加工的时间在m1上加工b
大概就是这样子。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define inf 1000000000
#define N 100007
using namespace std;
struct node
{
int a,b;
friend bool operator <(node x,node y)
{
return x.a+y.b+max(y.a,x.b)<y.a+x.b+max(x.a,y.b);
}
}c[50005];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&c[i].a,&c[i].b);
}
sort(c,c+n);
int m1=c[0].a,m2=c[0].a+c[0].b;
int ans=m2;
for(int i=1;i<n;i++)
{
if(m1+c[i].a<=m2)
{
ans+=c[i].b;
m1+=c[i].a;
m2+=c[i].b;
}
else
{
m1+=c[i].a;
ans=m1;
ans+=c[i].b;
m2=ans;
}
}
cout<<ans<<endl;
}