01矩阵

来源:互联网 发布:淘宝朋友代付款 编辑:程序博客网 时间:2024/06/04 19:44

描述
给定一个NxM的01矩阵,小Hi希望从中找到一个01间隔的子方阵,并且方阵的边长越大越好。

例如对于

01001001000101010101010101010101010

在右下角有一个4x4的01间隔方阵

代码(动态规划):

import java.util.Scanner;public class Main{   public static void main(String[] args){        Scanner scan = new Scanner(System.in);        String ss = scan.nextLine();        String[] str = ss.split(" ");        int n = Integer.parseInt(str[0]);        int m = Integer.parseInt(str[1]);        int[][] dp = new int[n][m];        if(m < 2 || n < 2){            System.out.println(-1);            return;        }        String[] matrix = new String[n];        for(int i = 0;i < n;i++){             matrix[i] = scan.nextLine();        }        for(int i = 0;i < n;i++){            for(int j = 0;j < m;j++){                dp[i][j] = 1;            }        }        int max = -1;        for(int i = 1;i < n;i++){            for(int j = 1;j < m;j++){                if(!(matrix[i].charAt(j) != matrix[i].charAt(j-1) &&                matrix[i].charAt(j) != matrix[i-1].charAt(j))){                    continue;                }                int top = dp[i][j-1];                int left = dp[i-1][j];                int tmp = Math.min(top,left);                if(matrix[i-tmp].charAt(j-tmp) != matrix[i-tmp+1].charAt(j-tmp)                 && matrix[i-tmp].charAt(j-tmp) != matrix[i-tmp].charAt(j-tmp+1))                    dp[i][j] = tmp+1;                else dp[i][j] = tmp;                max = max > dp[i][j]?max:dp[i][j];            }        }        System.out.println(max);    }}
原创粉丝点击