3 4 1011 1001 0001 3 4 1010 1001 0001
4 2 Note: Huge Input, scanf() is recommended.
找下规律... 将图像抽象一下。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[1111][1111],pre[1111][1111],h[1111]; char s[1111][1111]; int main() { int n,m,k,tem,ans; int i,j; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=n;i++) scanf("%s",s[i]); for(i=1;i<=n;i++) { for(j=0;j<m;j++){ a[i][j+1]=s[i][j]-'0'; pre[i][j+1]=0; } } for(j=1;j<=m;j++) { for(i=1;i<=n;i++) { if(a[i][j]) pre[i][j]=pre[i-1][j]+1; } } ans=0; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { h[pre[i][j]]++; } tem=0; for(k=i;k;k--) { ans=max(ans,k*(tem+h[k])); tem+=h[k]; } for(k=1;k<=i;k++) h[k]=0; } printf("%d\n",ans); } return 0; }