zoukankan      html  css  js  c++  java
  • 最大1矩阵

    这个算是模板code,以hdu 1505为例题,完全可以将其转化为最大1矩阵问题

    #include <stdio.h>
    #include <iostream>
    using namespace std;
    const int N=1111;
    
    int a[N][N];
    int Run(const int &m, const int &n)
    {
        int maxx=0;int k;
        int col[N];
        for(int j=1;j<=n;j++)     //探测每列的最长1,遇0则止
        {
            if(a[1][j]==0) col[j]=0;
            else
            {
                for(k=2;k<=m&&a[k][j]==1;++k);
                col[j]=k-1;
            }
        }
        for(int i=1;i<=m;i++)
        {
         if(i>1)
         {
             for(int j=1;j<=n;j++)
             {
                 if(a[i][j]==0) col[j]=0;      //倘此处为0,则截至
                 else
                 {
                     if(a[i-1][j]==0)         //上一处为0,则再跑一次探测(探测最长1)
                     {
                         for(k=i+1;k<=m&&a[k][j]==1;++k);
                         col[j]=k-1;
                     }
                 }
             }
         }
         for(int j=1;j<=n;j++)
         {
             if(col[j]>=i)         //y坐标向下的最长延伸
             {
                 int l,r;         //凡y坐标向下延伸大于等于第j列的都可以
                 for(l=j-1;l>=1&&col[l]>=col[j];--l);l++;  //向左找
                 for(r=j+1;j<=n&&col[r]>=col[j];++r);r--;  //向右找
                 int res=(r-l+1)*(col[j]-i+1);             //形成了一个矩阵,不要忘了加上自身
                 maxx=max(res,maxx);                  
             }
         }
        }
        return maxx;
    }
    
    
    int main()
    {
        int T;
        for(scanf("%d",&T); T; T--)
        {
            int m,n;
            char ch;
            scanf("%d%d",&m,&n);
            for(int i=1; i<=m; i++)
            {
                for(int j=1;j<=n;j++)
                {
                    cin>>ch;
                    if(ch=='R') a[i][j]=0;
                    else        a[i][j]=1;
                }
            }
            int ans=Run(m,n);
            printf("%d
    ",ans*3);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    8-2蒙版初识
    8-1使用自由变换(有些操作和教程不同)
    7-11使用色彩调整图层
    7-10使用历史记录画笔
    7-9将灰度转为彩色
    7-8其他色彩调整
    7-7自动色阶/自动对比度/自动颜色
    7-6替换颜色和色彩范围选取
    7-5匹配颜色
    7-4暗调/高光
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/5303009.html
Copyright © 2011-2022 走看看