Matrix Swapping II
HDU - 2830
题意:一个由0,1组成的矩阵,求只由1组成的矩阵的最大的面积,矩阵的列与列是可以随意交换的;
不看最后一个条件就和City Game HDU - 1505 一模一样了,但是这个题偏偏加上了最后一个条件, 怎么办呢???
还是和1505一样,先求出对应层的连续1的高度,然后把高的凑到一起不就OK了,也就是简单排个序;
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n, m;
char a[1100][1100];
int h[1100][1100], t[1100];
int main(){
while(~scanf("%d%d", &n, &m)){
for(int i=0; i<n; i++){
scanf("%s", a[i]);
}
memset(h, 0, sizeof(h));
int ans=0;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
if(a[i][j]=='1') h[i+1][j]=h[i][j]+1;
else h[i+1][j]=0;
t[j]=h[i+1][j];
}
sort(t, t+m, greater<int>() );
for(int j=0; j<m; j++){
ans=max(ans, t[j]*(j+1));
}
}
printf("%d\n", ans);
}
return 0;
}