在本地跑的示例和第一个数据点都没有问题,但是提交显示第1,6,7,8,9,10个数据点RE,4,5WA。
#include<stdio.h>
#include<stdbool.h>
int main(){
bool b_WkPieceState[25] = {false}/*工件加工状态*/, b_MachineStates[25] = {false}/*机器运行状态*/, b_Steps[25] = {false} ;
int i_m = 0, i_n = 0, i_Process[25][25] = {0}/*i工件j工序机器号*/, i_Steps[400]/*记录工件号*/, i_TimeNeeds[20][20] = {0}/*记录第i个工件的第j个工序所需时间*/, i_ProcessDot[25] = {0},/*记录每一个工件到第几步*/ i_j= 0;
int i_TimeLeft[25] = {0}/*每个机器剩余时间*/, i_MachineWorkPiece[25] = {0}/*记录机器内的工件号*/, i_Cnt = 0/*已执行步骤*/;
int i_T = 0;
int i = 0, j = 0;
scanf("%d%d", &i_m, &i_n);//m为机器/工序数,n为工件数
i_j = i_m * i_n;
for(i = 1; i <= i_j; i++){
scanf("%d", &i_Steps[i]);//记录第i步
}
for(i = 1; i<= i_n; i++){
for(j = 1; j <= i_m; j++){
scanf("%d", &i_Process[i][j]);//输入第i个工件需要的第j个工序机器号;
}
}
for(i = 1; i <= i_n; i++){
for(j = 1; j<= i_m; j++){
scanf("%d", &i_TimeNeeds[i][j]);//输入第i个工件的第j个工序所需时间;
}
}
for(i = 1; i<= i_n; i++){
i_ProcessDot[i] = 1;//记录工序点
}
while(i_Cnt != i_j){
i = 1;
int Process = 0, Dot = 0, i_WkPcNum = 0;
for(i = 1; i <= i_j; i++){
if(b_Steps[i] == false && b_WkPieceState[i_Steps[i]] == false){//工序未执行,工件未处于加工状态
i_WkPcNum = i_Steps[i];
Dot = i_ProcessDot[i_WkPcNum];
Process = i_Process[i_WkPcNum][Dot];
if(b_MachineStates[Process] == false){//机器未处于工作状态,可投入加工
b_MachineStates[Process] = true;
b_Steps[i] = true;
b_WkPieceState[i_WkPcNum] = true;//步骤完成,工件加工, 机器工作
i_ProcessDot[i_WkPcNum]++;//工序加一
i_TimeLeft[Process] = i_TimeNeeds[i_WkPcNum][Dot];//开始计时
i_MachineWorkPiece[Process] = i_WkPcNum;
}
}
}
i = 1;
for(i = 1; i <= i_m; i++){
if(b_MachineStates[i] == true){
i_TimeLeft[i]--;
if(i_TimeLeft[i] == 0){
b_MachineStates[i] = false;//机器空闲
b_WkPieceState[i_MachineWorkPiece[i]] = false;//工件加工完成
i_Cnt++;
}
}
}
i_T++;
}
printf("%d", i_T);//输出
return 0;
}