zoukankan      html  css  js  c++  java
  • 最大正方形 (Standard IO)

    Description

      给一个N*N的01矩阵, 求一个面积最大的全为1的正方形子矩阵. 输出它的面积.

    Input

      输入文件square.in的第一行包含一个正整数N.
      接下来N行, 每行N个数, 保证不是0就是1. 每行相邻两个数之间没有空格.

    Output

      输出文件为square.out,仅包含一个整数表示最大的全1子正方形矩阵的面积。

    题解

    五个字,优美的暴力。
    

    代码

    var
      n,ans:longint;
      f:array [0..1001,0..1001] of integer;
      a:array [0..1001,0..1001] of char;
    procedure init;
    var
      i,j:longint;
    begin
      readln(n);
      for i:=1 to n do
        begin
          for j:=1 to n do
            read(a[i,j]);
          readln;
        end;
      for i:=0 to n+1 do
        begin
          a[0,i]:='0';
          a[n+1,i]:='0';
        end;
      for i:=0 to n+1 do
        begin
          a[i,0]:='0';
          a[i,n+1]:='0';
        end;
      ans:=0;
    end;
    
    procedure main;
    var
      i,j,x,min:longint;
    begin
      fillchar(f,sizeof(f),0);
      for i:=1 to n do
        for j:=1 to n do
          if (a[i,j]='1') then
            if (a[i-1,j]='0') then f[i,j]:=1
                              else f[i,j]:=f[i-1,j]+1;
      for i:=1 to n do
        for j:=1 to n do
          if a[i,j]='1' then
            begin
              x:=j; min:=maxlongint;
              while a[i,x]='1' do
                begin
                  if f[i,x]<min then min:=f[i,x];
                  if ((x-j+1)*min>ans) and ((x-j+1)=min) then ans:=(x-j+1)*min;
                  inc(x);
                end;
            end;
      write(ans);
    end;
    
    begin
      init;
      main;
    end.
    
  • 相关阅读:
    安装 oracle
    svn 编辑
    软件构架
    liunx操作
    css的样式分类
    简单自己做了一个个人简历
    网页制作之表格,列表
    MYSQL表创建
    linux操作指令 第二部分
    linux操作指令 第一部分
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9319612.html
Copyright © 2011-2022 走看看