跪求大佬解惑,为什么
查看原帖
跪求大佬解惑,为什么
1052578
aptx283211楼主2024/11/28 11:11
#include <bits/stdc++.h>
using namespace std;


int gshi[20][20],gxu[20][20],xu[500],z[20][2],sum[20],qi[10000][20],sum1[20];
int main(){
	int n,m,o=0,o1=0,maxo=0,t1=0;
	cin>>m>>n;
	for(int i=1;i<=n*m;i++){
		cin>>xu[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>gxu[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>gshi[i][j];
		}
	}
	for(int e=1;;e++){
		for(int i=1;i<=m*n;i++){
			if(z[xu[i]][2]==1){
				z[xu[i]][2]=0;
			}
		}
		int t=1+t1,p=1;	
		for(int i=1;i<=m*n;i++){
			if(xu[i]==0){
				continue;
			}
			if(z[xu[i]][2]==1){
				continue;
			}
//			if(gxu[xu[i]][z[xu[i]][1]]==t&&z[xu[i]][2]==0){
//				t=gxu[xu[i]][z[xu[i]][1]+1];
//			}
			int y=0;
			if(gxu[xu[i]][z[xu[i]][1]+1]==t){
				for(int x=1;x<=i-1;x++){
					if(xu[i]!=0){
						if(gxu[xu[x]][z[xu[x]][1]+1]==gxu[xu[i]][z[xu[i]][1]+1]&&z[xu[x]][2]==0){
							if(sum1[xu[x]]<=sum1[xu[i]]){
								y=x;
							}
						}
					}
				}
			}
			if(y!=0){
				i=y;
			}
			if(gxu[xu[i]][z[xu[i]][1]+1]==t){
				z[xu[i]][1]+=1;
				for(int i1=max(sum1[xu[i]]+1,sum[t]+1);i1<=max(sum1[xu[i]],sum[t])+gshi[xu[i]][z[xu[i]][1]];i1++){
					qi[i1][t]=xu[i];
				}

				if(sum1[xu[i]]<sum[t]){
					sum[t]+=gshi[xu[i]][z[xu[i]][1]];
					sum1[xu[i]]=sum[t];
				}
				else if(sum1[xu[i]]>=sum[t]){
					sum1[xu[i]]+=gshi[xu[i]][z[xu[i]][1]];
					sum[t]=sum1[xu[i]];
				}
				o=sum[t];
				maxo=max(o,maxo);
				o1=max(t,o1);
				z[xu[i]][2]=1;
				xu[i]=0;	
				t++;
				p=0;
				t1=0;
			}
		}
		if(p==1){
			t1++;
		}
		int ans=0,p1=0;
		for(int i=1;i<=n*m;i++){
			if(xu[i]==0){
				ans++;
			}
			if(ans==n*m){
				p1=1;
				break;
			}
		}
		if(p1==1){
			break;
		}
	}
	cout<<maxo;
//	for(int i=1;i<=o1;i++){
//  	for(int j=1;j<=maxo;j++){
//			cout<<qi[j][i]<<" ";
//		}
//		cout<<endl;
//	}
}
2024/11/28 11:11
加载中...