zoukankan      html  css  js  c++  java
  • 找子矩阵

    LZDFDSMLL吃批萨

    题解:(参考)在矩阵中寻找最大正方形连续区域

    M中的每一个元素MijMij都有一个与之对应的数值maxijmaxij记录着以这个元素为左上角顶点的最大的一个正方形连续区域的大小(行/列 数)。 
    对元素MijMij有两种状态
    
    Mij≠kMij≠k , 此时可以得出maxij=0maxij=0。
    
    Mij=kMij=k , 此时可以得出maxij=min(max(i+1)j,maxi(j+1),max(i+1)(j+1))+1maxij=min(max(i+1)j,maxi(j+1),max(i+1)(j+1))+1。
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 #include <string>
     6 #include <vector>
     7 #include <stack>
     8 #include <map>
     9 #include <set>
    10 #include <queue>
    11 #include <list>
    12 #include <cstdlib>
    13 #include <iterator>
    14 #include <cmath>
    15 #include <iomanip>
    16 #include <bitset>
    17 #include <cctype>
    18 //#include <bits/stdc++.h>
    19 
    20 using namespace std;
    21 #define c_1(a) scanf("%d",&a)
    22 #define c_2(a,b) scanf("%d%d",&a,&b)
    23 #define c_3(a,b,c) scanf("%d%d%d",&a,&b,&c)
    24 #define min_2(a,b) a<b?a:b
    25 #define min_3(a,b,c) min_2(min_2(a,b),c)
    26 #define max_2(a,b) a>b?a:b
    27 #define max_3(a,b,c) max_2(max_2(a,b),c)
    28 #define ll long long
    29 #define rint register int
    30 #define mem0(x) memset(x, 0, sizeof(x))
    31 #define mem1(x) memset(x, -1, sizeof(x))
    32 #define lowbit(x)  x&-x
    33 /**inline int read()///神奇的读优
    34 {
    35     int x=0,f=1;char c=getchar();
    36     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    37     while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    38     return x*f;
    39 }*/
    40 ///2147483647 -2147483648
    41 ///9223372036854775807 -9223372036854775808
    42 //freopen("input.txt", "r", stdin);
    43 const double PI=acos(-1.0);
    44 const int inf = 0x3f3f3f3f;
    45 const ll inff = 0x3f3f3f3f3f3f3f3f;
    46 const int mod=1000000007;
    47 //map<ll,ll>mp;
    48 //set<ll>st;
    49 //stack<>st;
    50 //queue<>Q;
    51 /***********************************************/
    52 int a[5003][5003];
    53 int maxx[5004][5004];
    54 
    55 
    56 int main()
    57 {
    58     int n,m,k;
    59     c_3(n,m,k);
    60     while(k--)
    61     {
    62         int x,y;
    63         c_2(x,y);
    64         a[x][y]=-1;
    65     }
    66     ll sum=0;
    67     for(int x=n;x>=1;x--)
    68     {
    69         for(int y=m;y>=1;y--)
    70         {
    71             if(a[x][y]==-1) maxx[x][y]=0;
    72             else maxx[x][y]=min_3(maxx[x+1][y],maxx[x][y+1],maxx[x+1][y+1]),maxx[x][y]++;
    73             sum+=maxx[x][y];
    74         }
    75     }
    76     printf("%lld
    ",sum);
    77     return 0;
    78 }
    View Code
  • 相关阅读:
    PAT 1088. Rational Arithmetic
    PAT 1087. All Roads Lead to Rome
    PAT 1086. Tree Traversals Again
    PAT 1085. Perfect Sequence
    PAT 1084. Broken Keyboard
    PAT 1083. List Grades
    PAT 1082. Read Number in Chinese
    求最大公因数
    [转载]Latex文件转成pdf后的字体嵌入问题的解决
    [转载]Matlab有用的小工具小技巧
  • 原文地址:https://www.cnblogs.com/liuyongliu/p/10295676.html
Copyright © 2011-2022 走看看