zoukankan      html  css  js  c++  java
  • HDU2830 动态规划

      给定一个N*M的01矩阵,在可以交换列的情况下,求出最大的全1的子矩阵。

      代码如下:

    #include <cstring>
    #include <cstdio>
    #include <cstdlib>
    #include <algorithm>
    #define MAXN 1005
    using 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;
    }
  • 相关阅读:
    链表基础操作2
    数据结构第二章课后作业
    CSAPP第二個實驗bomblab
    链表的基础操作1
    Codeforces 375
    Codeforces 372
    Codeforces 367
    线性同余方程组
    【除草】反演
    【转】组合数求模
  • 原文地址:https://www.cnblogs.com/Lyush/p/2478118.html
Copyright © 2011-2022 走看看