P1248 加工生产调度

Posted mysh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1248 加工生产调度相关的知识,希望对你有一定的参考价值。

题目描述

某工厂收到了n个产品的订单,这n个产品分别在A、B两个车间加工,并且必须先在A车间加工后才可以到B车间加工。

某个产品i在A、B两车间加工的时间分别为Ai、Bi。怎样安排这n个产品的加工顺序,才能使总的加工时间最短。这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在A、B两车间加工完毕的时间。

输入格式

第一行仅—个数据n(0<n<1000),表示产品的数量。

接下来n个数据是表示这n个产品在A车间加工各自所要的时间(都是整数)。

最后的n个数据是表示这n个产品在B车间加工各自所要的时间(都是整数)。

输出格式

第一行一个数据,表示最少的加工时间;

第二行是一种最小加工时间的加工顺序。

输入输出样例

输入 #1
5
3 5 8 7 10
6 2 1 4 9
输出 #1

34

1 5 4 2 3

思路

代码

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int N=1010;

int n;

struct no {
	int a,b,minn,pm;
} t1[N],t2[N];

bool cmp(no a,no b) {
	return a.minn<b.minn;
}

int main() {
	scanf("%d",&n);
	for(int i=1; i<=n; i++)
		scanf("%d",&t1[i].a);
	for(int i=1; i<=n; i++)
		scanf("%d",&t1[i].b);
	for(int i=1; i<=n; i++) {
		t1[i].minn=min(t1[i].a,t1[i].b);
		t1[i].pm=i;
	}
	sort(t1,t1+n+1,cmp);
	int l=1,r=n;
	for(int i=1; i<=n; i++) {
		if(t1[i].minn==t1[i].a)
			t2[l++]=t1[i];
		else
			t2[r--]=t1[i];
	}
	int i=1,at=0,bt=0,t=t2[1].a;
	t2[n+1].a=0;
	while(i<=n) {
		bt+=t2[i].b;
		at=t2[++i].a;
		if(at<bt) {
			bt-=at;
			t+=at;
			at=0;
		} else if(at>=bt) {
			t+=at;
			at=0;
			bt=0;
		}
	}
	t+=bt;
	printf("%d
",t);
	for(int i=1; i<=n; i++)
		printf("%d ",t2[i].pm);
	printf("
");
	return 0;
}

 

 

以上是关于P1248 加工生产调度的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段

Java- 多机调度(贪心算法)

规则引擎如何优化生产调度系统

生产调度基于matlab遗传算法求解柔性生产调度(FJSP)问题含Matlab源码 1780期

生产调度基于matlab遗传算法求解柔性生产调度(FJSP)问题含Matlab源码 1780期

利用matlab软件实现遗传算法,解决生产调度问题