先上题目

  输入一个n表示有一个n*n的矩阵,然后输入矩阵的内容,"H"代表0,"."代表1,求出最大的填满1的正方形的面积。

  这是一道dp。

  定义一个数组s[][]代表以(1,1)和(i,j)为对角线的矩形中全为1的的矩形的边长。

  再定义一个数组row[][]代表(i,0)-(i,j)连续的1最长的长度;

  再定义一个数组col[][]代表(0,j)-(i,j)连续的1最长的长度;

  则

  if((i,j)==0) row[i][j]=col[i][j]=0;

  else

  {  

      row[i][j]=row[i][j-1]+1;

      col[i][j]=col[i-1][j]+1;

  }

  对于s[i][j],就会是s[i-1][j-1]+(i,j)  ,row[i][j]  ,col[i][j] 中的最小值,因为需要限制图形是正方形。

  最后只要扫一下s[][],找出里面最大的值,就是所求的正方形的边长,再平方就是所求的面积大小。

  目测有更加好的方法,这种方法在OJ上跑了一下要65ms。= =

上代码

#include <stdio.h>
#include <string.h>
#define MAX 1100
#define max(x,y) (x>y ? x: y)using namespace std;int  s[MAX][MAX],col[MAX][MAX],row[MAX][MAX];
char ch[MAX][MAX];int min(int x,int y,int z)
{if(x<=y && x<=z) return x;else if(y<=x && y<=z) return y;return z;
}int main()
{int i,j,t,n,maxn;char o;scanf("%d",&n);o=getchar();memset(s,0,sizeof(s));memset(ch,0,sizeof(ch));memset(col,0,sizeof(col));memset(row,0,sizeof(row));for(i=0;i<n;i++){gets(ch[i]);}for(t=0;t<n;t++){i=t+1;j=0;while(ch[t][j]!='\0'){if(ch[t][j]=='H'){j++;s[i][j]=0;}else{j++;s[i][j]=1;row[i][j]=row[i][j-1]+1;col[i][j]=col[i-1][j]+1;}}}for(i=1;i<=n;i++){for(j=1;j<=n;j++){s[i][j]=min(s[i-1][j-1]+1,col[i][j],row[i][j]);}}maxn=0;for(i=1;i<=n;i++){for(j=1;j<=n;j++){//printf("%d ",s[i][j]);maxn=max(maxn,s[i][j]);}//printf("\n");
    }printf("%d\n",maxn*maxn);return 0;
}

转载于:https://www.cnblogs.com/sineatos/archive/2013/06/12/3132963.html

求01矩阵中的最大的正方形面积相关推荐

  1. 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)

    一,题目: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)写出算法;(2)分析时间复杂度;(3) ...

  2. matlab 求取矩阵中值,matlab中取矩阵中指定列的值组成新矩阵

    matlab 矩阵中怎么加入冒号,比如我想矩阵A的第一列都为"1:" A(:,1)='1:';再问:不行的再答:用结构矩阵或者单元矩阵试试吧. 诚教:matlab中取矩阵的其中几行 ...

  3. 【python】求matrix矩阵中“1“能够围成最大的平行四边形的面积

    问题描述:设一个10*10矩阵全部由0和1组成,求该矩阵M中只包含1的最大平行四边形的面积 代码如下: import numpy as np import matplotlib.pyplot as p ...

  4. 求一个矩阵中的马鞍点(c语言实现)

    数据结构中的求一个矩阵的马鞍点 请编写一个完整的程序,如果矩阵A中存在这样的一个元素A[i,j]满足条件A[i,j]是第i行的值最小的元素,且又是第j列中最大的元素,则称之为该矩阵的一个马鞍点. 代码 ...

  5. 若在矩阵A中存在一个元素Aij,该元素是第i行元素中最大值并且又是第j列元素中最小值,则称此元素值为该元素的一个鞍点。假设以二维数组存储矩阵A,求该矩阵中的所有鞍点。

    #include <stdio.h> #include <stdlib.h> int main() {     int nh,nl,max,p,top=0;//max存储该行的 ...

  6. OpenCV求(图像)矩阵中最大值,最小值函数minMaxLoc() vs minMaxIdx()

    转载请注明出处. 文章地址:https://blog.csdn.net/duiwangxiaomi/article/details/97937706?spm=1001.2014.3001.5501   ...

  7. 01二维矩阵中最大全为1的正方形maxSquare——经典DP问题(二维)

    在一个二维01矩阵中找到全为1的最大正方形 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 以矩阵中每一个点作为正方形右下角点来处理,而以该点为右下角点的最大边长最多比 ...

  8. 01矩阵最大正方形面积、01矩阵最大矩形面积、直方图最大矩形面积

    01矩阵最大正方形面积 题意:给定一个矩阵,其中的元素为0或者1,要求找出其中元素全为1的面积最大的正方形. 题解:动态规划:对每个元素,把以其为右下角,元素全为1的正方形的最长边长记录下来.如果以元 ...

  9. java正方形矩阵_已知一个NxN的矩阵A,求矩阵中所有边长为m的正方形的子矩阵

    已知一个NxN的矩阵A,求矩阵中所有边长为m的正方形的子矩阵内元素的中位数.(m 例子: // m = 3 n = 5 // 01234 ݂         //  0 11357 ݂         ...

最新文章

  1. Fedora14 yum 安装源的地址配置到官方归档地址
  2. hadoot配置环境变量win_Windows 下Hadoop的环境变量配置
  3. P3808,P3796-[模板]AC自动机(简单版/加强版)
  4. 重磅快讯:CCF发布最新版推荐中文科技期刊目录
  5. Maven配置之pom.xml(一)
  6. 【招聘内推】阿里巴巴广告/推荐/搜索-算法工程师岗位
  7. 重装系统后mac语言怎么改成中文?
  8. 李刚的《疯狂Java讲义》
  9. vue组件之间的参数传递
  10. python语法32[装饰器decorator](转)
  11. OpenCV编译时提示错误“ Built target libprotobuf”
  12. 通信工程专业高级工程师职称申报经验分享
  13. 社会工程学读书[1]
  14. win10修改dns服务器命令,Win10怎么更改首选DNS服务器地址?
  15. win+e替换为xyplorer打开
  16. 粉笔科技创新OMO一体化模式 差异化突围职教市场
  17. 现代电商会员管理新玩法——付费会员
  18. vue-父子组件传参以及无限级评论
  19. 模线性方程ax≡b(mod n) (再结合 程序理解)
  20. python 离群值_数据预处理初学者宝典:360° 掌握离群值识别

热门文章

  1. Apache无法正常启动的原因
  2. C#取真实IP地址及分析
  3. js实现IE、谷歌浏览器打印网页内容
  4. React Native Keyboard使用详解
  5. 句句真研—每日长难句打卡Day21
  6. 有哪些皮一下就很开心的句子?
  7. 创业者必须要做一个超级现实的人
  8. 明星开店都是稳定赚钱的生活,稳赚不赔
  9. 品‮方牌‬可以利用视‮号频‬做什么
  10. 为什么有的安卓手机会越用越卡?