加工生产调度

代码:

把在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;
}

 

posted @ 2022-02-08 16:31  fervency  阅读(135)  评论(0编辑  收藏  举报