码迷,mamicode.com
首页 > 其他好文 > 详细

找子矩阵

时间:2019-01-20 20:01:27      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:子矩阵   play   \n   can   pac   图片   put   line   isp   

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\n",sum);
77     return 0;
78 }
View Code

 

找子矩阵

标签:子矩阵   play   \n   can   pac   图片   put   line   isp   

原文地址:https://www.cnblogs.com/liuyongliu/p/10295676.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!