http://acm.hdu.edu.cn/showproblem.php?pid=2830 #include<iostream> #include<algorithm> using namespace std; #define N 1001 int h[2][N]; int real[N]; char map[N][N]; int main(void) { int n,m; while(~scanf("%d%d",&n,&m)) { int i,j; int ans=0; for(i=1;i<=n;i++) scanf("%s",map[i]+1); memset(h,0,sizeof(h)); for(j=1;j<=m;j++) if(map[1][j]=='1') h[1][j]=1; for(i=1;i<=n;i++) { int k=i%2; if(i!=1) { for(j=1;j<=m;j++) { if(map[i][j]=='1') h[k][j]=h[1-k][j]+1; else h[k][j]=0; } } for(j=1;j<=m;j++) real[j]=h[k][j]; sort(real+1,real+m+1); for(j=1;j<=m;j++) { int temp=(m-j+1)*real[j]; if(temp>ans) ans=temp; } } printf("%d/n",ans); } } 枚举高度,每个不比他小的高度值都能帮他构成矩形