求大佬优化一下,超时了
查看原帖
求大佬优化一下,超时了
706001
stoneoceam楼主2022/6/10 11:17
#include<iostream>
using namespace std;

int m, n; //m机器数 n工件数

typedef struct order {
	int number;
	int time;
}order;

typedef struct workpiece {
	int step = 1;
	order* orders = new order[m];
	int working = 0;
}workpiece;

typedef struct machine {
	int working = 0;
	int number;
	int time = 0;
}machine;

int main() {
	
	cin >> m >> n;
	int* kk = new int[m * n + 1];//给定的安排顺序
	for (int i = 1; i <= m * n; i++) {
		cin >> kk[i];
	}

	workpiece* workpieces = new workpiece[n + 1];

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> workpieces[i].orders[j].number;
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> workpieces[i].orders[j].time;
		}
	}
		
	machine* machines = new machine[m+1];

	int Time = 0;
	int flag = 1;
	while (flag) {
		for (int i = 1; i <= n*m; i++) {
			if (kk[i] != 0 && workpieces[kk[i]].working == 0 && machines[workpieces[kk[i]].orders[workpieces[kk[i]].step].number].working == 0) {
				machines[workpieces[kk[i]].orders[workpieces[kk[i]].step].number].time = workpieces[kk[i]].orders[workpieces[kk[i]].step].time;
				machines[workpieces[kk[i]].orders[workpieces[kk[i]].step].number].number = i;
				machines[workpieces[kk[i]].orders[workpieces[kk[i]].step].number].working = 1;
				workpieces[kk[i]].working = 1;
			}
		}

		Time++;

		for (int j = 1; j <= m; j++) {
			if (machines[j].time != 0 && machines[j].working == 1) {
				machines[j].time--;
			}
			if (machines[j].time == 0 && machines[j].working == 1) {
				machines[j].working = 0;
				workpieces[kk[machines[j].number]].step++;
				workpieces[kk[machines[j].number]].working = 0;
				kk[machines[j].number] = 0;
			}
		}
		int sum = 0;
		for (int i = 1; i <= n * m; i++) {
			sum += kk[i];
		}
		for (int i = 1; i <= n * m; i++) {
			if (kk[i] == 0)
				flag = 0;
			else
				flag = 1;
		}
	}
	

	cout << Time;


	return 0;
}
2022/6/10 11:17
加载中...