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; }