给定一个N*M的01矩阵,在可以交换列的情况下,求出最大的全1的子矩阵。
代码如下:
#include#include #include #include #define MAXN 1005using namespace std;int N, M, high[MAXN], temp[MAXN];char G[MAXN][MAXN];int deal(){ int Max = 0; memcpy(temp, high, sizeof (high)); sort(temp+1, temp+M+1); for (int i = M; i >= 1; --i) { if (temp[i]) { Max = max((M-i+1)*temp[i], Max); } } return Max;}int DP(){ int Max = 0; for (int i = 1; i <= N; ++i) { for (int j = 1; j <= M; ++j) { if (G[i][j] == '1') { ++high[j]; } else { high[j] = 0; } } Max = max(Max, deal()); } return Max;}int main(){ while (scanf("%d %d", &N, &M) == 2) { memset(high, 0, sizeof (high)); for (int i = 1; i <= N; ++i) { scanf("%s", G[i]+1); } printf("%d\n", DP()); } return 0;}