找子矩阵

Posted liuyongliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找子矩阵相关的知识,希望对你有一定的参考价值。

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

 

以上是关于找子矩阵的主要内容,如果未能解决你的问题,请参考以下文章

如何将浮点矩阵作为 2D 纹理传递给片段着色器?

找子串

度度熊找子串

19 年 7 月

找子串替换(kmp)poj1572

如何在 python 中并行化以下代码片段?