題目描述
有一天,小貓rainbow和freda來到了湘西張家界的天門山玉蟾宮,玉蟾宮宮主藍兔盛情地款待了它們,並賜予它們一片土地。
這片土地被分成nm個格仔,每個格仔裡寫著』r』或者』f』,r代表這塊土地被賜予了rainbow,f代表這塊土地被賜予了freda。
現在freda要在這裡賣萌。。。它要找一塊矩形土地,要求這片土地都標著』f』並且面積最大。但是rainbow和freda的oi水平都弱爆了,找不出這塊土地,而藍兔也想看freda賣萌(她顯然是不會程式設計的……),所以它們決定,如果你找到的土地面積為s,它們每人給你s兩銀子。
輸入
第一行兩個整數n,m,表示矩形土地有n行m列。
接下來n行,每行m個用空格隔開的字元』f』或』r』,描述了矩形土地。
輸出
輸出乙個整數,表示你能得到多少銀子,即(3最大』f』矩形土地面積)的值。
輸入樣例
5 6r f f f f f
f f f f f f
r r r f f f
f f f f f f
f f f f f f
輸出樣例
45資料範圍
50%的資料:1≤n,m≤200;
100%的資料:1≤n,m≤1000。
思路
單調棧,維護寬度和高度
先用字首和算出每行高度,對於每一行進行維護
#include
#include
#include
#include
#include
using
namespace std;
const
int n=
1005
;int a[n]
[n];
int sum[n]
[n];
struct node
s[n]
;int h[n]
;intmx(
int x,
int y)
intmain()
}for
(i=1
;i<=n;i++
)int top=
0,len=
0,ans=0;
for(i=
1;i<=n;i++
)else
top++
; s[top]
.h=h[j]
; s[top]
.w=len+1;
}}len=0;
while
(top)
} ans*=3
;printf
("%d\n"
,ans)
;return0;
}
洛谷P4147 玉蟾宮
傳送門給定乙個 n m 的 0 1 矩陣,求最大子矩陣 滿足矩陣內所有元素均為 1 輸出矩陣大小 3 懸線法,最大子矩陣板子題 也可以單調棧和並查集,但是窩不會 維護三個值 l i j 和 r i j up i j 分別代表當前點 i,j 向左最長的延伸到的點位置,向右最長的延伸到的點位置,向上最長...
P4147 玉蟾宮 單調棧
有一天,小貓rainbow和freda來到了湘西張家界的天門山玉蟾宮,玉蟾宮宮主藍兔盛情地款待了它們,並賜予它們一片土地。這片土地被分成n m個格仔,每個格仔裡寫著 r 或者 f r代表這塊土地被賜予了rainbow,f代表這塊土地被賜予了freda。現在freda要在這裡賣萌。它要找一塊矩形土地,...
P4147 玉蟾宮 單調棧
有一天,小貓rainbow和freda來到了湘西張家界的天門山玉蟾宮,玉蟾宮宮主藍兔盛情地款待了它們,並賜予它們一片土地。這片土地被分成n m個格仔,每個格仔裡寫著 r 或者 f r代表這塊土地被賜予了rainbow,f代表這塊土地被賜予了freda。現在freda要在這裡賣萌。它要找一塊矩形土地,...