最大矩阵 WA60pts求调


屏幕截图 2025-01-24 203229

#include<bits/stdc++.h>
using namespace std;
int n,m,sum;
int a[205][205];
vector<int> h;
int cal(vector<int>& h){
  int ans=0;
  vector<int> v;
  h.insert(h.begin(),0);
  h.push_back(0);
  for(int i=0;i<h.size();i++){
    while(!v.empty()&&h[v.back()]>h[i]){
      int cur=v.back();
      v.pop_back();
      int left=v.back()+1;
      int right=i-1;
      ans=max(ans,(right-left+1)*h[cur]);
    }
    v.push_back(i);
  }
  return ans;
}
int main(){
  scanf("%d%d",&n,&m);
  for(int i=1;i<=n;i++){
    for(int j=1;j<=m;j++){
      char c;
      cin>>c;
      a[i][j]=c-'0';
      if(i==1) h.push_back(a[i][j]);
      else h[j]=a[i][j]==1?h[j]+1:0;
    }
    sum=max(sum,cal(h));
    printf("%d\n",cal(h));
  }
  printf("%d",sum);
  return 0;
}