1. 程式人生 > 實用技巧 >88最大正方形(221)

88最大正方形(221)

作者: Turbo時間限制: 1S章節: 動態規劃

晚於: 2020-09-02 12:00:00後提交分數乘係數50%

截止日期: 2020-09-09 12:00:00

問題描述 :

在一個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。

示例:

輸入:

1 0 1 0 0

1 0 1 1 1

1 1 1 1 1

1 0 0 1 0

輸出: 4

輸入說明 :

首先輸入矩陣的行數m、列數n

然後輸入m行,每行n個字元0或1,中間無空格分隔。

輸出說明 :

輸出一個整數

輸入範例 :

輸出範例 :

#include <iostream>
#include 
<vector> using namespace std; class Solution { public: int maximalSquare(vector<vector<int>>& matrix) { if(matrix.size()==0) return 0; int m=matrix.size(),n=matrix[0].size(); vector<vector<int>> dp(m,vector<int>(n));
int len=0; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if(matrix[i][j]==1) { if(i==0||j==0) dp[i][j]=1; else dp[i][j]=min(min(dp[i-1][j],dp[i][j-1
]),dp[i-1][j-1])+1; } len=max(len,dp[i][j]); } } return len*len; } }; int main() { int m, n; char data; vector<vector<int> > matrix; cin>>m>>n; for(int i=0; i<m; i++) { vector<int> row; for(int j=0; j<n; j++) { cin>>data; row.push_back(data-'0'); } matrix.push_back(row); } int res=Solution().maximalSquare(matrix); cout<<res<<endl; return 0; }