全是1的最大子矩陣(DP)
阿新 • • 發佈:2018-12-16
【題目描述】 給出1個M*N的矩陣M1,裡面的元素只有0或1,找出M1的一個子矩陣M2,M2中的元素只有1,並且M2的面積是最大的。輸出M2的面積。
Input 第1行:2個數m,n中間用空格分隔(2 <= m,n <= 500) 第2 - N + 1行:每行m個數,中間用空格分隔,均為0或1。 Output 輸出最大全是1的子矩陣的面積。
Input示例 3 3 1 1 0 1 1 1 0 1 1 Output示例 4
【思路】 依然當成最大子矩陣和來做,只不過需要判斷一下當前矩陣是不是全1的即可
#include<bits/stdc++.h> using namespace std; const int maxn=505; int n,m; int g[maxn][maxn]; int main(){ scanf("%d%d",&m,&n); for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ scanf("%d",&g[i][j]); g[i][j]+=g[i-1][j]; } } int ans=0; for(int i=1;i<=n;++i){ for(int j=i;j<=n;++j){ int cnt=0; for(int k=1;k<=m;++k){ if(g[j][k]-g[i-1][k]!=j-i+1){ ans=max(ans,cnt*(j-i+1)); cnt=0; } else ++cnt; } ans=max(ans,cnt*(j-i+1)); } } printf("%d\n",ans); return 0; }