hdu 2830 Matrix Swapping II(hdu1505的加强版)
#include<cstdio> #include<cstring> #include<algorithm> #define N 1005 using namespace std; const int INF=1<<30; char mat[N][N]; int a[N][N]; int L[N],R[N]; int main() { int m,n; memset(a,0,sizeof(0)); while(scanf("%d%d",&m,&n)==2) { for(int i=1;i<=m;i++) { scanf("%s",mat[i]+1); for(int j=1;j<=n;j++) { if(mat[i][j]=='1') a[i][j]=1; else a[i][j]=0; } } for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { if(a[i][j]==1) a[i][j]+=a[i-1][j]; } } int ans=-INF; for(int i=1;i<=m;i++) { sort(a[i]+1,a[i]+1+n); for(int j=1;j<=n;j++) { L[j]=j; while(L[j]>1&&a[i][L[j]-1]>=a[i][j]) L[j]=L[L[j]-1]; } for(int j=n;j>=1;j--) { R[j]=j; while(R[j]<n&&a[i][R[j]+1]>=a[i][j]) R[j]=R[R[j]+1]; } for(int j=1;j<=n;j++) { ans=max(ans,a[i][j]*(R[j]-L[j]+1)); } } printf("%d\n",ans); } return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。