#include <iostream>
using namespace std;
void initialize(int& m, int& n,int choiceMachine[],int time[],int inOrder[]) {
cin >> m >> n;
for (int i = 0; i < n * m; i++) {
cin >> inOrder[i];
}
for (int i = 0; i < m*n; i=i+m) {
for(int j=0;j<m;j++)
cin>>choiceMachine[i+j];
}
for (int i = 0; i < m*n; i=i+m) {
for (int j = 0; j < m; j++)
cin >> time[i + j];
}
return;
}
bool finishWork(int m,int n,int order[],int machine_status[],int user[]) {
bool f1 = true;
bool f2 = true;
bool f3 = true;
for (int i = 0; i < 10000;i++) {
if (order[i] != 0) {
f1 = false;
break;
}
}
for (int i = 0; i < 10000; i++) {
if (machine_status[i] != 0) {
f2 = false;
}
}
for (int i = 0; i < 10000; i++) {
if (user[i] != 0) {
f3 = false;
}
}
if (f1 && f2 && f3)
return true;
else
return false;
}
void run(int& m, int& n,int choiceMachine[], int time[], int inOrder[]) {
int machine[10000] = { 0 };
int use[10000] = {0};
int machine_status[10000] = { 0 };
int totaltime = 0;
int workTime[10000] = { 0 };
for (int i = 0; i < m * n; i++) {
if (inOrder[i] != 0 && use[inOrder[i]-1]==0) {
for (int j = (inOrder[i] - 1) * m; j < inOrder[i] * m; j++) {
if (choiceMachine[j] != 0) {
if (machine_status[choiceMachine[j]-1] == 0) {
use[inOrder[i]-1] = 1;
machine[choiceMachine[j] - 1] = inOrder[i];
inOrder[i] = 0;
machine_status[choiceMachine[j]-1] = 1;
workTime[choiceMachine[j]-1] = time[j];
choiceMachine[j] = 0;
break;
}
else {
break;
}
}
}
}
if (i == m * n - 1) {
cout << endl;
totaltime++;
i = 0;
for (int j = 0; j < m * n; j++) {
if (workTime[j] != 0) {
workTime[j]--;
if (workTime[j] == 0) {
machine_status[j] = 0;
use[machine[j]-1] = 0;
machine[j] = 0;
}
}
}
}
if (finishWork(m, n, inOrder, machine_status,use) == true)
break;
}
cout << totaltime;
return;
}
int main() {
int m = 0;
int n = 0;
int inOrder[10000] = { 0 };
int choiceMachine[10000] = { 0 };
int time[10000] = { 0 };
int target = 0;
initialize(m, n, choiceMachine, time, inOrder);
run(m, n, choiceMachine, time, inOrder);
return 0;
}
```不知道为啥QAQ