为什么第三个测试点过不了?求助
查看原帖
为什么第三个测试点过不了?求助
572269
KevinMark楼主2023/1/7 14:25
#define _CRT_SECURE_NO_WARNINGS
#include <stdc++.h>
using namespace std;

int main() {
	int n,m=0;//代表机器数和工件数
//	printf("输入机器数和工件数");
	scanf("%d %d",&m,&n);
	int statusId = 0;
	int arr1[360]= {0};
	int arr2[21][21]= {0}; //存储2n个数据,工序号数组
	int arr3[21][21]= {0}; //工序时间数组
	int arr4[21]= {0}; //寻找状态的数组
	int timeTag[21][8000]= {0};
	int timeTail[8000]= {0};
	int maxTime[101]= {0};
	int startPt=0;
//	printf("输入操作顺序");
	for(int i=1; i<=m*n; i++) {
		scanf("%d",&arr1[i]);
	}

//	printf("输入工件顺序");
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			scanf("%d",&arr2[i][j]);
		}
	}
//	printf("输入工件时间");
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			scanf("%d",&arr3[i][j]);
		}
	}
	for(int i=1; i<=n*m; i++) {
		arr4[i] = 1;
	}

	int proId = 0; int prcId = 0;
	for(int i=1; i<=m*n; i++) {
		//printf("i=%d\n",i);
		proId = arr1[i];
		
		//printf("proId=%d\n",proId);
		statusId = arr4[proId];
		//printf("statusId=%d\n",statusId);
		prcId = arr2[proId][statusId];
		//printf("prcId=%d\n",prcId);
		int time=arr3[proId][statusId];
		//printf("time=%d\n",time);

		for(int j=1; j<=7800; j++) {
			int spaceTimeCount = 0;
			int fillFlagRight,fillFlagLeft=0;
			if(timeTag[prcId][j]==0) {
				fillFlagLeft = j;
				fillFlagRight = fillFlagLeft+spaceTimeCount;
				while(timeTag[prcId][fillFlagRight]==0 && spaceTimeCount < time) {
					//printf("success\n");
					fillFlagRight = fillFlagLeft+spaceTimeCount;
					spaceTimeCount++;
				}
			}
			if(spaceTimeCount >= time ) {
				//printf("安排第%d件工件\n",proId);
				if(maxTime[proId] >= fillFlagLeft) {
					fillFlagLeft = maxTime[proId];
				} else {
						
				}
				
				//printf("fillFlagLeft=%d\n",fillFlagLeft);
				for(int j=fillFlagLeft; j<time+fillFlagLeft; j++) {
					timeTag[prcId][j] = proId;

				}
				maxTime[proId]=time+fillFlagLeft;
				timeTail[prcId] = timeTail[prcId]>time+fillFlagLeft?timeTail[prcId]:time+fillFlagLeft;
//				printf("完成了一道工序\n");
				arr4[proId] = arr4[proId]+1;
//				printf("fillFlagLeft=%d\n",fillFlagLeft);
//				for(int j=1;j<=m;j++){
//					for(int i=1;i<=21;i++){
//					printf("%d ",timeTag[j][i]);
//				}
				
//			}
				
				break;
			}

		}

	}
	int maxTail=timeTail[1];
	for(int i=1; i<=n; i++) {
		if(maxTail < timeTail[i]) {
			maxTail = timeTail[i];
		}
	}
	cout << maxTail-1 << " " <<endl;

	system("pause");
}


2023/1/7 14:25
加载中...