[Luogu P4147] 玉蟾宫 (网格DP)

题面

传送门:https://www.luogu.org/problemnew/show/P4147


Solution

裸的求极大子矩阵

感谢wzj dalao的教学

首先,有一个很显然但很重要的结论,那就是求极大子矩阵肯定要贴着边或一个障碍点,否则就会浪费

根据这个定理,我们可以考虑一种做法

我们可以枚举每一个可放置的点

我们可以很轻松的得知它与它左边的障碍点(或边界)的距离,也可以得知它上面与下面能扩展到哪里(即无障碍点最多能到哪里)

那这个点能扩出的长方形的最大面积就是它左边的上面与下面能扩展出来的距离的最小值*它到左边障碍点的距离

如图:

[图待补充]

然后取一个最大的面积就好


Code

 1 //Luogu P4147 玉蟾宫
 2 //May,9th,2018
 3 //悬线法旋转90°求极大子矩阵
 4 #include<iostream>
 5 #include<cstdio>
 6 #include<cstring>
 7 using namespace std;
 8 const int N=1000+10;
 9 const int inf=0x3f3f3f3f;
10 int up[N][N],down[N][N],a[N][N],n,m;
11 int main()
12 {
13     scanf("%d%d",&n,&m);
14     char c[2];
15     memset(a,0x80,sizeof a);
16     for(int i=1;i<=n;i++)
17         for(int j=1;j<=m;j++)
18         {
19             scanf("%s",c+1);
20             if(c[1]==‘F‘)
21                 a[i][j]=0;
22         }
23
24     for(int i=1;i<=n;i++)
25         for(int j=1;j<=m;j++)
26             if(a[i][j]==0 and a[i-1][j]==0)
27                 up[i][j]=up[i-1][j]+1;
28     for(int i=n;i>=1;i--)
29         for(int j=1;j<=m;j++)
30             if(a[i][j]==0 and a[i+1][j]==0)
31                 down[i][j]=down[i+1][j]+1;
32
33     int ans=0,u=inf,d=inf,w=0;
34     for(int i=1;i<=n;i++)
35     {
36         u=d=inf;
37         w=0;
38         for(int j=1;j<=m;j++)
39             if(a[i][j]!=0)
40             {
41                 u=d=inf;
42                 w=0;
43             }
44             else
45             {
46                 u=min(u,up[i][j]);
47                 d=min(d,down[i][j]);
48                 ans=max(ans,(++w)*(u+d+1));
49             }
50     }
51     printf("%d",ans*3);
52     return 0;
53 }

正解(C++)

原文地址:https://www.cnblogs.com/GoldenPotato/p/9013493.html

时间: 2024-08-29 19:14:36

[Luogu P4147] 玉蟾宫 (网格DP)的相关文章

dp--悬线dp P4147 玉蟾宫

题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda. 现在freda要在这里卖萌...它要找一块矩形土地,要求这片土地都标着'F'并且面积最大. 但是rainbow和freda的OI水平都弱爆了,找不出这块土地,而蓝兔也想看freda卖萌(她显然是不会编程的……),所以它们决

[Luogu P1006]传纸条 (网格DP)

题面 传送门:https://www.luogu.org/problemnew/show/P1006 Solution 挺显然但需要一定理解的网络(应该是那么叫吧)DP 首先有一个显然但重要的结论要发现:从左上走到右下再从右下走回左上=从左上走两次到右下 那么接下来可以考虑: 设f[i][j][k][l]为第一次走到了(i,j)第二次走到了(k,l) 在路径不交错为前提下的能取到的最大友好值 转移方程也挺好写的 考虑这种情况能从哪里转移过来就好(i,j)可以从(i-1,j)或(i,j-1)转移过

BZOJ 3039: 玉蟾宫【dp】

Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地.这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda.现在freda要在这里卖萌...它要找一块矩形土地,要求这片土地都标着'F'并且面积最大.但是rainbow和freda的OI水平都弱爆了,找不出这块土地,而蓝兔也想看freda卖萌(她显然是不会编程的……),所以它们决定

「LuoguP4147」 玉蟾宫

题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda. 现在freda要在这里卖萌...它要找一块矩形土地,要求这片土地都标着'F'并且面积最大. 但是rainbow和freda的OI水平都弱爆了,找不出这块土地,而蓝兔也想看freda卖萌(她显然是不会编程的……),所以它们决

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

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3039 n*m的矩阵由R和F组成,求全是F的子矩阵的大小的三倍. 分析 悬线法: 浅谈用极大化思想解决最大子矩形问题--王知昆 l[x][y]表示点(x,y)在它那一行最多能扩展到左边的位置. r[x][y]表示点(x,y)在它那一行最多能扩展到右边的位置. 每一行分别预处理l与r. 在做dp的时候:如果点(x,y)可以取,那么h[x][y]=h[x-1][y]+1,l[x][y]=max(l

3039: 玉蟾宫

3039: 玉蟾宫 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 512  Solved: 311[Submit][Status] Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地.这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda.现在freda要在这里卖萌...它要找一块

[Tyvj1939] 玉蟾宫(单调栈)

传送门 题目 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地.这片土地被分成N*M个格子,每个格子里写着’R’或者’F’,R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda.现在freda要在这里卖萌...它要找一块矩形土地,要求这片土地都标着’F’并且面积最大.但是rainbow和freda的OI水平都弱爆了,找不出这块土地,而蓝兔也想看freda卖萌(她显然是不会编程的……)

codevs 2491 玉蟾宫

时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题解 题目描述 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda. 现在freda要在这里卖萌...它要找一块矩形土地,要求这片土地都标着'F'并且面积最大. 但是rainbow和fre

2491 玉蟾宫

2491 玉蟾宫 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda. 现在freda要在这里卖萌...它要找一块矩形土地,要求这片土地都标着'F'并且面积最大. 但是rainb