zoukankan      html  css  js  c++  java
  • [洛谷1681]最大正方形II

    思路:
    对于矩阵中的每一个元素,处理出它能扩展到的上边界$up$、左边界$left$,DP得出以该元素为右下角的最大正方形。
    状态转移方程:$f_{i,j}=min(f_{i-1,j-1},up_{i,j},left_{i,j})$。

     1 #include<cstdio>
     2 #include<cctype>
     3 #include<algorithm>
     4 inline int getint() {
     5     char ch;
     6     while(!isdigit(ch=getchar()));
     7     int x=ch^'0';
     8     while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
     9     return x;
    10 }
    11 const int inf=0x7ffffffe;
    12 int main() {
    13     int n=getint(),m=getint();
    14     bool a[2][m+1];
    15     int up[2][m+1],left[2][m+1],f[2][m+1];
    16     f[1][0]=inf;
    17     for(register int i=0;i<=m;i++) f[0][i]=inf;
    18     int ans=0;
    19     for(register int i=1;i<=n;i++) {
    20         for(register int j=1;j<=m;j++) {
    21             a[i&1][j]=getint();
    22             up[i&1][j]=(i==1||a[i&1][j]==a[!(i&1)][j])?1:(up[!(i&1)][j]+1);
    23             left[i&1][j]=(j==1||a[i&1][j]==a[i&1][j-1])?1:(left[i&1][j-1]+1);
    24             f[i&1][j]=std::min(f[!(i&1)][j-1]+1,std::min(up[i&1][j],left[i&1][j]));
    25             ans=std::max(ans,f[i&1][j]);
    26         }
    27     }
    28     printf("%d
    ",ans);
    29     return 0;
    30 }
  • 相关阅读:
    面向对象程序设计寒假作业2
    面向对象程序设计寒假作业1
    自我介绍
    3组-Alpha冲刺-1/6
    3组 需求分析报告
    3组 团队展示
    第一次个人编程作业
    第一次博客作业
    我罗斯方块最终篇
    我罗斯方块设计
  • 原文地址:https://www.cnblogs.com/skylee03/p/7389063.html
Copyright © 2011-2022 走看看