天天看點

藍橋杯 ALGO-112 暗戀 java問題描述解題思路參考代碼

問題描述

問題描述
  同在一個高中,他卻不敢去找她,雖然在别人看來,那是再簡單不過的事。暗戀,是他唯一能做的事。他隻能在每天課間操的時候,望望她的位置,看看她傾心的動作,就夠了。操場上的彩磚啊,你們的位置,就是他們能夠站立的地方,他倆的關系就像磚與磚之間一樣固定,無法動搖。還記得當初鋪磚的勞工,将整個操場按正方形鋪磚(整個操場可視為R行C列的矩陣,矩陣的每個元素為一塊正方形磚塊),正方形磚塊有兩種,一種為藍色,另一種為紅色。我們定義他和她之間的“愛情名額”為最大純色正方形的面積,請你寫一個程式求出“愛情名額”。
輸入格式
  第一行兩個正整數R和C。
  接下來R行C列描述整個操場,紅色磚塊用1來表示,藍色磚塊用0來表示。
輸出格式
  一個數,表示他和她之間的“愛情名額”。
樣例輸入
5 8
0 0 0 1 1 1 0 1
1 1 0 1 1 1 1 1
0 1 1 1 1 1 0 1
1 0 1 1 1 1 1 0
1 1 1 0 1 1 0 1
樣例輸出
9
資料規模和約定
  40%的資料R,C<=10;
  70%的資料R,C<=50;
  100%的資料R,C<=200;
           

解題思路

暗戀java是沒有好結果的

參考代碼

package 暗戀;

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
	Scanner sr = new Scanner(System.in);
	int r = sr.nextInt();
	int c = sr.nextInt();
	//建立地圖
	int map[][] = new int[r][c];
	for (int i = 0; i < map.length; i++) {
		for (int j = 0; j < map[i].length; j++) {
			map[i][j] = sr.nextInt();
		}
	}
	//選擇最小邊:暗戀正方形邊長最大不能超過這個邊
	int min = Math.min(r, c);
	//暴力枚舉暗戀正方形的邊長
	for (int len = min; len >= 0; len--) {
		//枚舉某個位置是暗戀正方形的左上頂角
		for (int i = 0; i <= r-len; i++) {
			for (int j = 0; j <= c-len; j++) {
				//進行驗證
				if (f(i , j , map , len , 0) || f(i , j , map , len , 1)) {
					System.out.println(len*len);return;
				}
			}
		}
	}
}

private static boolean f(int j, int k, int[][] map, int i, int z) {
	//判斷這個區域是不是純色
	for (int l = j; l <= j; l++) {
		for (int m = k; m <= k; m++) {
			if (map[l][m] == z) {
				return false;
			}
		}
	}
	return true;
}
}