zoukankan      html  css  js  c++  java
  • HDU 2830 Matrix Swapping II

    暴力枚举+DP预处理。

    可以枚举矩形底边是哪一行,枚举到一行的时候,计算以该行为底边,最大矩形面积是多少。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    const int maxn=1000+10;
    char s[maxn][maxn];
    int a[maxn][maxn];
    int dp[maxn][maxn];
    int tmp[maxn];
    int n,m;
    int ans;
    
    void read()
    {
        for(int i=0;i<n;i++) scanf("%s",s[i]);
        for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[i][j]=s[i-1][j-1]-'0';
    }
    
    void init()
    {
        ans=0;
        memset(dp,0,sizeof dp);
    }
    
    void work()
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(a[i][j]==0) dp[i][j]=0;
                else dp[i][j]=dp[i-1][j]+1;
            }
        }
    
    
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                tmp[j]=dp[i][j];
            }
            sort(tmp+1,tmp+1+m);
            for(int i=1;i<=m;i++) ans=max(ans,(m-i+1)*tmp[i]);
        }
        printf("%d
    ",ans);
    }
    
    int main()
    {
        while(~scanf("%d%d",&n,&m))
        {
            read();
            init();
            work();
        }
        return 0;
    }
  • 相关阅读:
    C语言I博客作业09
    C语言I博客作业08
    C语言I作业07
    C语言博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业03
    C语言|博客作业07
    C语言|博客作业06
    C语言|博客作业05
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5308219.html
Copyright © 2011-2022 走看看