求助(>.<)70分,7,8,10测试点
查看原帖
求助(>.<)70分,7,8,10测试点
1292265
Zzz123456789101112楼主2024/3/14 19:21
#include<iostream>
using namespace std;
struct gongjian {
	int jqh;//每个工件的机器编号
	int sj;//每个工件每个工序的时间
}gj_sx[20][20];//定义数组
int n, m;//定义全局变量 n个工件,m个工序
int gj_gx[20];//用来记录每个工件对印的工序
int gj_last[20];//用来记录各个工件的结束时间
int apsx[400];//用来记录安排顺序//n*m=400
int jq_sj[20][8000] = { 0 };//各个机器的时间轴//全局变量自动初始化为0//20*20*20=8000
void inits() {
	cin >> m >> n;
	for (int i = 0; i < m * n; i++) {//输入安排顺序
		cin >> apsx[i];
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> gj_sx[i][j].jqh;//输入第i号机器的机器号
		}                
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> gj_sx[i][j].sj;//输入第i号机器的时间
		}
	}
	for (int i = 1; i <= n; i++) {//初始化
		gj_gx[i] = 1;//每个工件对应工序起始时均为1
	}

}
bool judge(int bgtime, int endtime,int jqh) {
	for (int i = bgtime; i <= endtime; i++) {
		if (jq_sj[jqh][i] == 1) return false;//此段时间内已被占用,无法继续使用
	}
	return true;
}
void chuli() {
	for (int i = 0; i < m * n; i++) {
		int gj = apsx[i];//找到需要插入的工件
		int gx = gj_gx[gj]++;//找到当前工件所在工序
		int jqh = gj_sx[gj][gx].jqh;//当前工件所对应工序所对应的机器号
		int sj= gj_sx[gj][gx].sj;//当前工件所对应工序所对应的时间
		int begintime = gj_last[gj];//当前工序能开始的最早的时间=当前工件的最晚时间(完成时间)
		while (true) {
			if (judge(begintime + 1, begintime + sj,jqh)) {//若此时间段内全部为空,则进行插入操作
				for (int j = begintime; j<= begintime + sj; j++) {
					jq_sj[jqh][j] = 1;//标记此时间被占用
				}
				gj_last[gj] = begintime + sj;//更新此工件最后时间
				break;
			}
			begintime++;//否则begintime++;继续向后寻找可用于操作开始的时间
		}

	}
}
int main() {
	inits();//输入,初始化函数
	chuli();//处理函数
	int max = gj_last[1];
	for (int i = 1; i <= n; i++) {//打擂台
		if (max < gj_last[i])max = gj_last[i];
	}
	cout << max;
	return 0;
}
2024/3/14 19:21
加载中...