首先预处理每个F点左右,下一共有多少个F点,然后

对于每个为0的点(R),从这个点开始,一直到这个点

下面第一个R点,这一区间中的min(左),min(右)更新答案。

ps:我估计这道题数据有的格式不对,开始过不去,后来改了读入

就能过了

/**************************************************************
    Problem:
    User: BLADEVIL
    Language: Pascal
    Result: Accepted
    Time: ms
    Memory: kb
****************************************************************/
 
//By BLADEVIL
var
    n, m                        :longint;
    map                         :array[..,..] of longint;
    ans, len1, len, len2        :longint;
    left, right, down           :array[..,..] of longint;
     
function max(a,b:longint):longint;
begin
    if a>b then max:=a else max:=b;
end;
 
function min(a,b:longint):longint;
begin
    if a>b then min:=b else min:=a;
end;
     
procedure init;
var
    i, j, k                     :longint;
    ss                          :ansistring;
begin
    readln(n,m);
    for i:= to n do
    begin
        readln(ss);
        k:=;
        for j:= to length(ss) do
            if ss[j]<>' ' then
            begin
                inc(k);
                if ss[j]='F' then map[i,k]:= else map[i,k]:=;
            end;
    end;
     
    for i:= to n do
        for j:= to m do
            if map[i,j]= then left[i,j]:= else left[i,j]:=left[i,j-]+;
             
    for i:=n downto do
        for j:=m downto do
        begin
            if map[i,j]= then down[i,j]:= else down[i,j]:=down[i+,j]+;
            if map[i,j]= then right[i,j]:= else right[i,j]:=right[i,j+]+;
        end;
     
end;
 
procedure main;
var
    i, j, k                     :longint;
begin
    for i:= to n do
        for j:= to m do
            if map[i,j]= then
            begin
                len:=;
                len1:=maxlongint div ;
                len2:=maxlongint div ;
                for k:= to down[i+,j] do
                begin
                    len1:=min(len1,left[i+k,j]);
                    len2:=min(len2,right[i+k,j]);
                    ans:=max(ans,(len1+len2-)*k);
                end;
                if len1>=maxlongint div then continue;
                inc(len,len1);
                ans:=max(ans,(len-)*down[i+,j]);
            end;
    writeln(ans*);
end;
 
begin
    init;
    main;
end.

bzoj 3039 悬线法求最大01子矩阵的更多相关文章

  1. BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp

    1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑 ...

  2. City Game UVALive - 3029(悬线法求最大子矩阵)

    题意:多组数据(国外题好像都这样),每次n*m矩形,F表示空地,R表示障碍 求最大子矩阵(悬线法模板) 把每个格子向上延伸的空格看做一条悬线 以le[i][j],re[i][j],up[i][j]分别 ...

  3. hdu4328(经典dp用悬线法求最大子矩形)

    http://wenku.baidu.com/view/728cd5126edb6f1aff001fbb.html 关于悬线法,这里面有详解. 我当时只想到了记录最大长度,却没有想到如果连最左边和最右 ...

  4. P4147 玉蟾宫(悬线法求最大子矩阵)

    P4147 玉蟾宫 悬线法 ,\(l_{i,j},r_{i,j},up_{i,j}\) 分别表示 \((i,j)\) 这个点向左,右,上能到达的远点.然后面积就很好办了.具体实现见代码. 然而,还有更 ...

  5. bzoj 3039: 玉蟾宫 单调栈或者悬线法求最大子矩阵和

    3039: 玉蟾宫 Time Limit: 2 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 有一天,小猫rainbow ...

  6. 【BZOJ-3039&1057】玉蟾宫&棋盘制作 悬线法

    3039: 玉蟾宫 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 753  Solved: 444[Submit][Status][Discuss] D ...

  7. 2018.09.29 bzoj3885: Cow Rectangles(悬线法+二分)

    传送门 对于第一个问题,直接用悬线法求出最大的子矩阵面积,然后对于每一个能得到最大面积的矩阵,我们用二分法去掉四周的空白部分来更新第二个答案. 代码: #include<bits/stdc++. ...

  8. 【BZOJ】3039: 玉蟾宫 悬线法

    [题意]给定01矩阵,求最大全1子矩阵.n,m<=1000. [算法]动态规划(悬线法) [题解]★对于01矩阵中的任意一个全1极大子矩阵,都可以在其上边界遇到的障碍点处悬线到下边界的点x,则点 ...

  9. BZOJ 3039: 玉蟾宫( 悬线法 )

    最大子矩阵...悬线法..时间复杂度O(nm) 悬线法就是记录一个H向上延伸的最大长度(悬线), L, R向左向右延伸的最大长度, 然后通过递推来得到. ----------------------- ...

随机推荐

  1. 在peopletools里面测试文件上传

    Using the PeopleTools Test Utilities Page Select selectPeopleTools, then selectUtilities, then selec ...

  2. Winform菜单之ContextMenuStrip

    ContextMenuStrip实际就是上下文菜单,就是右键单击某个窗体或者控件后出来的菜单. 从工具栏里拖一个出来放在窗口上就行 然后进行一系列的设置,设置方法跟前面的MenuStrip基本是一样的 ...

  3. linux 的开机启动脚本顺序

    linux 开机启动脚本顺序 linux 开机启动脚本顺序. 第一步:启动内核 第二步:执行init (配置文件/etc/inittab) 第三步:启动相应的脚本,并且打开终端/etc/init.d  ...

  4. AsyncTask的简单使用

    package com.zzw.life; import android.app.Activity; import android.os.AsyncTask; import android.os.Bu ...

  5. Delphi中TStringList类常用属性方法详解

    TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delim ...

  6. DrawTool画笔之图形笔

    相关知识参考DrawTool画笔之纹理笔  , 图形笔的实现跟纹理笔的实现是一样的,重载Stroke的DrawCore方法,效果图: --------------------------------- ...

  7. 做HDU1010 带出来一个小问题

    做1010  本来是想的DFS深搜  但是自己凭空打  打不出来  因为没有记模板  然后就去搜  但是看了一遍  自己打却又是有BUG  然后验证  就出现了一个二维字符数组打印的问题 开始代码是这 ...

  8. OracleINSERT提示IGNORE_ROW_ON_DUPKEY_INDEX

    OracleINSERT提示IGNORE_ROW_ON_DUPKEY_INDEX insert提示IGNORE_ROW_ON_DUPKEY_INDEX 在 insert into table a() ...

  9. Binder相关

    Binder分析 需了解C/S还有管理这些的ServiceManager. 简单来讲你(client)有个包裹(parcel)让快递员(proxy)送到公司(server),   公司(server) ...

  10. JVM学习总结五——性能监控及故障处理工具

    之前扯了四篇理论,这一篇终于可以动动手了.本篇我们将介绍JVM常用的一些工具,这些工具将是我们监控JVM状态.处理故障和调优分析的利器. 不过在开始之前,我还是要先车扯两句:工具终归只是帮助我们我们处 ...