java MLE 求大佬帮忙
查看原帖
java MLE 求大佬帮忙
1143787
xjk15672261875楼主2024/10/21 22:54

思路就是二分答案+bfs就是报MLE,难道java真不能拿来写题吗

import java.util.*;


public class Main {
	
	static int x,y,tx,ty;
	public static boolean check(int asd) {
		nn[1]=1;mm[1]=1;
		book[1][1]=1;
		while(hard<tail) {
			x=nn[hard];
			y=mm[hard];
			for(int i=0;i<4;i++) {
				tx=x+next[i][0];
				ty=y+next[i][1];
				if(tx<1||tx>n||ty<1||ty>m) {
					continue;
				}
				if(book[tx][ty]>0) {
					continue;
				}
				if(a[tx][ty]>asd) {
					continue;
				}
				if(tx==n) {
					return true;
				}
				book[tx][ty]=1;
				nn[tail]=tx;
				mm[tail++]=ty;
			}
			hard++;
		}
		return false;
	}
	//初始化方法
	public static void csh() {
		for(int i=1;i<=n;i++) {
			for(int j=1;j<=m;j++) {
				book[i][j]=0;
			}
		}
		hard=1;tail=2;
	}
	
	static Scanner scanner=new Scanner(System.in);
	static int [][] next = { {0,1},{1,0},{0,-1},{-1,0} };
	
	static int [][] a=new int [1011][1011];
	
	static int [][] book=new int [1101][1101];
	
	static int [] nn=new int [1010001];
	static int [] mm=new int [1010001];
	static int hard,tail;
	static int n;
	static int m;
	static int min=1000,max=0;
	static int ans;
	static int mig;
	public static void main(String[] args) {
		n=scanner.nextInt();
		m=scanner.nextInt();
		for(int i=1;i<=n;i++) {
			for(int j=1;j<=m;j++) {
				a[i][j]=scanner.nextInt();
				if(max<a[i][j]) {
					max=a[i][j];
				}
				if(min>a[i][j]) {
					min=a[i][j];
				}
			}
		}
		ans=max;
		while(min<=max) {
			csh();
			mig=(min+max)/2;
			if(check(mig)){
				ans=mig;
				max=mig-1;
			}else{
				min=mig+1;
			}
		}
		System.out.println(ans);
	}
}
2024/10/21 22:54
加载中...