⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3096217_ac_1966ms_5264k.java

📁 北大大牛代码 1240道题的原代码 超级权威
💻 JAVA
字号:
import java.util.*;

public class Main 
{
	static final int INF = 2100000000;

    public static void main(String [] args)
    {
		new Main().solve();
    }

	private void solve()
	{
		Scanner cin = new Scanner (System.in);

		int M, N, min;
		int st, ed;
		int i, j, k, cas;
		int dp[][] = new int [101][28];
		int from[][] = new int [101][28];
		String inf[] = new String [101];

		cas = 1;
		while(true)
		{
			M = cin.nextInt();
			N = cin.nextInt();
			if(M==0&&N==0)
			{
				break;
			}
			System.out.println("Case "+(cas++)+":\n");
			for(i = 1; i <= M; i++)
			{
				inf[i] = cin.next();
			}
			st = cin.nextInt();
			ed = cin.nextInt();
			for(i = 1; i <= M; i++)
			{
				Arrays.fill(dp[i],INF);
				Arrays.fill(from[i],-1);
			}
			ed--;
			for(j = 0; j < N; j++)
			{
				if(inf[ed].charAt(j)=='O')
				{
					dp[ed][j] = 1;
					from[ed][j] = -1;
				}
			}
			for(i = ed-1; i >= st; i--)
			{
				for(j = 0; j < N; j++)
				{
					if(inf[i].charAt(j)=='O')
					{
						min = INF;
						int prev = -1;;
						for(k = N-1; k >= 0; k--)
						{
							if(inf[i+1].charAt(k) == 'O' && dp[i+1][k] + (j!=k?1:0) <= min)
							{
								min = dp[i+1][k] + (j!=k?1:0);
								prev = k;
							}
						}
						if(min != INF)
						{
							dp[i][j] = min;
							from[i][j] = prev;
						}
					}
				}
			}
			int first = -1;
			min = INF;
			for(i = N-1; i >= 0; i--)
			{
				if(dp[st][i] <= min)
				{
					min = dp[st][i];
					first = i;
				}
			}
			if(min==INF)
			{
				System.out.println("Not available");
			}
			else
			{
				for(i = 0; i < min; i++)
				{
					System.out.print((char)(first+'A')+": "+st+'-');
					while(st<ed&&from[st][first]==first)
						st++;
					st++;
					System.out.println(st);
					first = from[st-1][first];
				}
			}
			System.out.println();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -