zoukankan      html  css  js  c++  java
  • HDU1505 City Game/玉蟾宫/全0子矩阵 悬线法

    题意: 给出一个像这样的矩阵

               R F F F F F

        F F F F F F

        R R R F F F

           F F F F F F

        F F F F F F

     求F组成的最大子矩阵(面积最大) 有多组数据

      优秀的暴力???

      思路:枚举每个点 然后这个点可以往上延伸到最上的点 这两点为一根线 这根线左移移到最左可以到的地方 右边也是如此 然后算出面积

                       需要预处理出每个点往左延伸的最远点与往右延伸的最远点

    code

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #define M 1010
     5 #define go(i,a,b) for(register int i=a;i<=b;i++)
     6 #define goo(i,a,b) for(register int i=a;i>=b;i--)
     7 #define mem(i) memset(i,0,sizeof(i));
     8 using namespace std;
     9 int read()
    10 {
    11   char c; c=getchar(); while(c!='F'&&c!='R') c=getchar();
    12   if(c=='F') return 1; return 2;
    13 }
    14 int map[M][M],l[M][M],r[M][M],u[M][M];
    15 int m,n,ans,t;
    16 void init()
    17 {
    18   go(i,1,m) go(j,2,n)
    19     if(map[i][j]==1&&map[i][j-1]==1) l[i][j]=l[i][j-1];
    20   go(i,1,m) goo(j,n-1,1)
    21     if(map[i][j]==1&&map[i][j+1]==1) r[i][j]=r[i][j+1];
    22 }
    23 int main()
    24 {
    25   scanf("%d%d",&m,&n);
    26   go(i,1,m) go(j,1,n)
    27     {
    28       map[i][j]=read();
    29       if(map[i][j]==1) u[i][j]=1;
    30       l[i][j]=j;r[i][j]=j;
    31     }
    32       
    33   init();
    34 
    35   go(i,1,m) go(j,1,n)
    36     {
    37       if(i>1&&map[i][j]==1&&map[i-1][j]==1)
    38       {
    39         l[i][j]=max(l[i][j],l[i-1][j]);
    40         r[i][j]=min(r[i][j],r[i-1][j]);
    41         u[i][j]=u[i-1][j]+1;
    42       }
    43       ans=max(ans,(r[i][j]-l[i][j]+1)*u[i][j]);
    44     }
    45       
    46   printf("%d
    ",ans*3);
    47   return 0;
    48 }
    光伴随的阴影
  • 相关阅读:
    Pandas对于CSV的简单操作
    前端之BOM和DOM
    前端之JavaScript
    前端之CSS初识
    定时ping取返回值并绘图
    etree不存在解决方法
    内置方法练习(一)
    pip使用
    python变量、变量属性
    python 爬取段子网段子写入文件
  • 原文地址:https://www.cnblogs.com/forward777/p/10125078.html
Copyright © 2011-2022 走看看