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
  • 相关阅读:
    单选按钮控件(Ridio Button)的使用
    带属性页的对话框
    异常处理与MiniDump详解(4) MiniDump
    单片机与嵌入式 以及ARM DSP FPGA 几个概念的理解
    VC更换图标文件
    http://user.qzone.qq.com/2413264738/2
    安装包安装 执行有相对路径的程序不能正确运行
    如何将 jar 包导入Maven 本地仓库
    19、访问者设计模式
    11、装饰器模式
  • 原文地址:https://www.cnblogs.com/liuyongliu/p/10295676.html
Copyright © 2011-2022 走看看