正解:单调栈/悬线法

解题报告:

ummm这题我当初做的时候一点思路也没有只会暴力出奇迹:D(啊听说暴力好像能水过去呢,,,

然后当初是看的题解,然后学了下悬线法

然后就忘了:D

然后我现在看发现看不懂辽:D

#论写题解的好处:D

所以赶紧来写个题解QAQ

ummm悬线法这个玩意儿会单独写个学习笔记的到时候放链接QAQ所以这里不详解了

反正这题就相当于是个最大子矩阵的玩意儿?有点悬线法板子题的意思蛤?

那如果知道悬线法就可以直接过了,好了没了感觉没太多可说的QAQ

然而这题谢总是布置在单调栈专题的

所以

单调栈解法了解一下?

ummm单调栈就大概想下就出来了?感觉没有悬线法那么难理解(所以我悬线法还没研究出来,,,ummm,,,,

首先做个前缀和记录每列从上往下累计的F的个数

然后就变成每行做一次单调栈(就是最大子矩阵单调栈板子题了qwq

然后就没了?

感觉说得好简陋鸭

那我再,仔细说下QAQ

就以样例为例做个解释

R F F F F F                0 1 1 1 1 1
F F F F F F                1 2 2 2 2 2
R R R F F F  于是可以做成   0 0 0 3 3 3
F F F F F F                1 1 1 4 4 4
F F F F F F                2 2 2 5 5 5

然后对每行当做最大子矩阵那题做个单调栈,就欧克了qwq

所以复杂度似乎是O(nm)?显然是可以过的qwq

然后代码在这儿qwq

#include<bits/stdc++.h>
using namespace std;
#define rp(i,x,y) for(register int i=x;i<=y;++i)

+;
int ans,t,fil[N][N],stck[N],lth[N],n,m;

inline int read()
{
    ,y=;
    ') && ch!='-')ch=getchar();
    ,ch=getchar();
    )+(x<<)+(ch^'),ch=getchar();
    return y?x:-x;
}
inline char readch()
{
    char ch=getchar();while(ch!='F' && ch!='R')ch=getchar();
    return ch;
}
inline ;memset(lth,,,,sizeof(stck));}
inline void work(int x)
{
    ;fil[x][m+]=;
    rp(i,,m+)
    {
        ;
        while(stck[tail]>fil[x][i])len+=lth[tail],ans=max(ans,len*stck[tail]),--tail;
        stck[++tail]=fil[x][i];lth[tail]=len+;
    }
}

int main()
{
    int T=read();
    while(T--)
    {
        n=read(),m=read();clr();
        rp(i,,n)
            rp(j,,m)
            {
                char ch=readch();
                +fil[i-][j];;
            }
        rp(i,,n)work(i);
        printf();
    }
    ;
}

对了,,,我发现这题还有几个神奇巴拉的题解?比如并茶几?比如前缀和巴拉巴拉的?还挺有趣的嘿可能有时间会了解下然后写题解趴qwq

然后今天讲题的时候还分享了个O(n3)的前缀和

就是之前考过的那个入阵曲那题的方法,降维,over

有时间自己写下然后放代码

先放个hl的丑陋代码qwq

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
inline int qr(void ){
    char c=getchar();
    ,q=;
    ||c>)
        q=c==?-:q,c=getchar();
    &&c<=)
        x=(x<<)+(x<<)+(c^),c=getchar();
    return q*x;
}
typedef long long ll;
;
#define RP(t,a,b)   for(int t=(a),edd=(b);t<=edd;t++)
ll ans;
ll data[maxn][maxn];
ll k,b;
int n,m;
inline void fakedp(void){
    RP(t0,,n)
        RP(t1,t0,n){
            k=;
            b=;
            RP(t,,m){
                ][t])==(t1-t0+))
                    k++,b=max(b,k);
                else
                    k=;
            }
            b*=(t1-t0+);
            ans=max(ans,b);
        }
}
char qaq;
int main(){
    n=qr();
    m=qr();
    RP(t,,n){
        RP(i,,m){
            qaq=getchar();
            while(qaq!='R'&&qaq!='F')
                qaq=getchar();
            if(qaq=='R')
                data[t][i]=+data[t-][i];
            else
                data[t][i]=+data[t-][i];
        }
    }
    fakedp();
    cout<<ans*;
}

丑陋代码

还有个是n2logn 的神仙方法?是lsy大佬之前港的,然而我之前找他要代码然后复制过来格式错了?然后我上ycg那题找他的记录感觉他是用的n2的?就很绝望QAQ先这样趴有时间再搞QAQ

洛谷P4147 玉蟾宫 单调栈/悬线法的更多相关文章

  1. [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)

    [BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...

  2. 洛谷P4147 玉蟾宫(动规:最大子矩形问题/悬线法)

    题目链接:传送门 题目大意: 求由F构成的最大子矩阵的面积.输出面积的三倍. 1 ≤ N,M ≤ 1000. 思路: 悬线法模板题. #include <bits/stdc++.h> us ...

  3. P4147 玉蟾宫--单调栈

    P4147 玉蟾宫 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子 ...

  4. 洛谷 P4147 玉蟾宫 (最大子矩形问题)

    这道题用到了悬线法,非常牛逼,可以看这个论文. https://blog.csdn.net/twtsa/article/details/8120269 #include<cstdio> # ...

  5. 洛谷 P1169 [ZJOI2007]棋盘制作 (悬线法)

    和玉蟾宫很像,条件改成不相等就行了. 悬线法题目 洛谷 P1169  p4147  p2701  p1387 #include<cstdio> #include<algorithm& ...

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

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

  7. BZOJ_3039_玉蟾宫_(动态规划+悬线法)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3039 n*m的矩阵由R和F组成,求全是F的子矩阵的大小的三倍. 分析 悬线法: 浅谈用极大化思 ...

  8. 洛谷P4147 玉蟾宫 (单调栈)

    要求我们去找一个最大矩形面积. 单调栈做法(和P1950 长方形那道题类似(一模一样)). 1 #include<bits/stdc++.h> 2 using namespace std; ...

  9. [洛谷P4147] 玉蟾宫

    类型:单调栈 传送门:>Here< 题意:求一个$01$矩阵中最大子矩形(全是$1$)的面积 解题思路 单调栈的一个经典应用 考虑维护一个数组$p[i][j]$表示$(i,j)$往上最多有 ...

随机推荐

  1. 如何关闭Struts2的webconsole.html

    出于安全目的,在禁用了devMode之后,仍然不希望其他人员看到webconsole.html页面,则可以直接删除webconsole.html 的源文件, 它的位置存在于: 我们手工删除 strut ...

  2. iOS开发-Autolayout小结

    昨天重点学习了下Autolayout,把以前没有吃透的概念重新理解了下,现在感觉整个人都是棒棒哒. 上一个项目是使用计算坐标代码的方式来布局UI界面,这种方式的缺点在于当苹果发布新尺寸设备时需要重写代 ...

  3. Win10 快捷键

    Win + D # 最小化桌面 Win + L # 锁屏 Win + E # 打开"我的电脑" Win + I # 打开设置 Win + P # 启动投屏 Win + G # 屏幕 ...

  4. vue再次入手(数据传递①)

    准备 之前使用vue.js完成一个项目之后,对其还是充满着无限兴趣,于是不妨利用碎片时间再次研究一下这个“令人着迷”的js框架. 1.新建一个基于vue的项目,具体方法不再赘述,请看这里:http:/ ...

  5. 123、 android Retrofit 介绍和使用(转载)

    简单使用:http://blog.csdn.net/bitian123/article/details/51899716 http://blog.csdn.net/duanyy1990/article ...

  6. Matlab 曲线拟合之polyfit与polyval函数

    p=polyfit(x,y,n) [p,s]= polyfit(x,y,n) 说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p.x必须是单调的.矩阵s用于生成预测值的误差估 ...

  7. MDU某产品OMCI模块代码质量现状分析

    说明 本文参考MDU系列某产品OMCI模块现有代码,提取若干实例以说明目前的代码质量,亦可作为甄别不良代码的参考. 本文旨在就事论事,而非否定前人(没有前人的努力也难有后人的进步).希望以史为鉴,不破 ...

  8. CSS技巧:逐帧动画抖动解决方案

    笔者所在的前端团队主要从事移动端的H5页面开发,而团队使用的适配方案是: viewport units + rem.具体可以参见凹凸实验室的文章 – 利用视口单位实现适配布局 . 笔者目前(2017. ...

  9. Python tkinter 控件更新信息

    下面几个例子关于tkinter界面更新的,简单易懂,分享一下. 例子_1: 代码_1: from tkinter import Tk, Checkbutton, Label from tkinter ...

  10. jpa中时间戳格式应该用哪种类型

    遇到个bug,数据库时间存储用了datetime,但是下面的java jpa代码,查询回来,却只有日期. String innerSql = getInnerQuery(departmentId, k ...