dp--悬线dp P4147 玉蟾宫
题目背景
有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。
题目描述
这片土地被分成$N\times M$个格子,每个格子里写着'$R$'或者'$F$',$R$代表这块土地被赐予了$rainbow$,F代表这块土地被赐予了$freda$。
现在$freda$要在这里卖萌。。。它要找一块矩形土地,要求这片土地都标着'$F$'并且面积最大。
但是$rainbow$和$freda$的$OI$水平都弱爆了,找不出这块土地,而蓝兔也想看freda卖萌(她显然是不会编程的……),所以它们决定,如果你找到的土地面积为$S$,它们每人给你S两银子。
输入格式
第一行两个整数$N$,$M$,表示矩形土地有$N$行$M$列。
接下来$N$行,每行$M$个用空格隔开的字符'$F$'或'$R$',描述了矩形土地。
输出格式
输出一个整数,表示你能得到多少银子,即(43\times$最大'$F$'矩形土地面积)的值。
大体思路就是一共三个数组,表示三个方向:$r[i][j]$表示当前位置能向右拓展的最远位置,$l[i][j]$表示当前位置能向左拓展的最远位置,$up[i][j]$表示当前位置能向上拓展的最远位置。由于“木桶效应”,我们所能围城的最大矩形的面积其实也取决于最短的一个长度,$r-l+1$就是矩形的长,$i-up$就是矩形的高,长和高都知道了的话,矩形的面积就很好求了吧,说的可能比较简略。
代码如下:
#include <cstdio>
#include <iostream>
using namespace std;
int n,m;
int a[][];
char c;
int l[][];
int r[][];
int up[][];
int main()
{
scanf ("%d%d",&n,&m);
for (int i = ;i <= n;i++)
{
for (int j =;j<= m;j++)
{
cin>>c;
if (c=='F')
a[i][j]=;
l[i][j]=j;
r[i][j]=j;
up[i][j]=i;
}
}
for (int i = ;i <= n;i++)
{
for (int j = ;j <= m;j++)
{
if (!a[i][j]^a[i][j-]&&a[i][j]==)
l[i][j]=l[i][j-];
}
}
for (int i = ;i <= n;i++)
{
for (int j = m-;j >= ;j--)
{
if (!a[i][j]^a[i][j+]&&a[i][j]==)
r[i][j]=r[i][j+];
}
}
for (int i = ;i <= n;i++)
{
for (int j = ;j <= m;j++)
{ if (!a[i-][j]^a[i][j]&&a[i][j]==)
up[i][j]=up[i-][j],l[i][j]=max(l[i-][j],l[i][j]),r[i][j]=min(r[i-][j],r[i][j]);
}
}
int ans=;
int tmp;
for (int i = ;i <= n;i++)
{
for (int j = ;j <= m;j++)
{
if (a[i][j]==)
{
tmp = r[i][j]-l[i][j]+;
ans=max(ans,tmp*(i-up[i][j]+));
}
}
}
cout<<ans*<<endl;
return ;
}
dp--悬线dp P4147 玉蟾宫的更多相关文章
- 悬线法 || BZOJ3039: 玉蟾宫 || Luogu P4147 玉蟾宫
题面: P4147 玉蟾宫 题解:过于板子举报了 #include<cstdio> #include<cstring> #include<iostream> #de ...
- P4147 玉蟾宫(悬线法求最大子矩阵)
P4147 玉蟾宫 悬线法 ,\(l_{i,j},r_{i,j},up_{i,j}\) 分别表示 \((i,j)\) 这个点向左,右,上能到达的远点.然后面积就很好办了.具体实现见代码. 然而,还有更 ...
- [Luogu P4147] 玉蟾宫 (网格DP)
题面 传送门:https://www.luogu.org/problemnew/show/P4147 Solution 裸的求极大子矩阵 感谢wzj dalao的教学 首先,有一个很显然但很重要的结论 ...
- DP(悬线法)【P1169】 [ZJOI2007]棋盘制作
顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述-->p1169 棋盘制作 题目大意 给定一个01棋盘,求其中01交错的最大正方形与矩形. 解题思路: 动态规划---悬线法 以下内 ...
- P4147 玉蟾宫--单调栈
P4147 玉蟾宫 题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子 ...
- P4147 玉蟾宫
P4147 玉蟾宫 给定一个 \(N * M\) 的矩阵 求最大的全为 \(F\) 的子矩阵 Solution 悬线法 限制条件为转移来的和现在的都为 \(F\) Code #include<i ...
- [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)
[BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...
- P4147 玉蟾宫 二维DP 悬线法
题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ...
- 洛谷P4147 玉蟾宫(动规:最大子矩形问题/悬线法)
题目链接:传送门 题目大意: 求由F构成的最大子矩阵的面积.输出面积的三倍. 1 ≤ N,M ≤ 1000. 思路: 悬线法模板题. #include <bits/stdc++.h> us ...
随机推荐
- 最小生成树的两种方法(Kruskal算法和Prim算法)
关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连 ...
- 3 JVM配置参数
- select rank() over
select * from (select rank() over(partition by barcode order by sheetdate) num, * from ScanRecord wh ...
- Atcoder比赛副站
https://agc039.contest.atcoder.jp/
- swarm docker-compose.yml NFS 搭建LNMP
列表: 172.16.0.40 (swarm-master) 172.16.0.160 (swarm-worker) 172.16.0.170 (swarm-worker) 1 ...
- setup factory 设置自启动
Registry.SetValue(HKEY_LOCAL_MACHINE, "Software//Microsoft//Windows//CurrentVersion//Run", ...
- golang 读取 chrome保存的网站账号信息
package main import ( "database/sql" "fmt" "log" "os" " ...
- 【LeetCode】合并两个有序数组
[问题] 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明:初始化 nums1 和 nums2 的元素数量分别为 m ...
- SpringBoot#自定义配置的封装
_震惊,开局 不可避免的需要弄一些自定义的配置. 要点: 1. 把配置项都写出来,分析层次关系:2. 抽象成bean与bean之间的关系,写出bean对应的类,这时候配置项对应了bean的属性,属性可 ...
- Power BI角色控制
Case:企业的数据分析报表经常需要进行权限控制,根据读者的部门或职位,决定他可以看到的数据.例如,A部门的人只能查看A部门的数据,B部门的人只能查看B部门的数据,而领导层则可以看到所有的数据. 1, ...