加工生产调度
代码:
把在A车间加工时间最短的部件最先加工,这样使得B车间能更快开始加工,把在B车间加工时间最短的部件最后加工,这样使得A车间的空闲时间最短
#include<bits/stdc++.h>
using namespace std;
int n,ans[100010],t[100010],a[100010],b[100010];
struct node{ int minn,id; }sx[100010];
bool cmp(node aa,node bb){ return aa.minn<bb.minn; }
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
sx[i].id=i;
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++)
{
scanf("%d",&b[i]);
sx[i].minn=min(a[i],b[i]);
}
sort(sx+1,sx+n+1,cmp);
int l=0,r=n+1;
for(int i=1;i<=n;i++)
{
if(sx[i].minn==a[sx[i].id])
{
l++;
ans[l]=sx[i].id;
}
else
{
r--;
ans[r]=sx[i].id;
}
}
for(int i=1;i<=n;i++)
{
t[i]=t[i-1]+a[ans[i]];
}
int sum=t[1]+b[ans[1]];
for(int i=2;i<=n;i++)
{
sum=max(t[i],sum)+b[ans[i]];
}
printf("%d\n",sum);
for(int i=1;i<=n;i++)
{
printf("%d ",ans[i]);
}
return 0;
}