玉蟾宮(最大子矩形面積)codevs2491

2021-08-07 01:38:24 字數 2108 閱讀 2513

題目描述 description

有一天,小貓rainbow和freda來到了湘西張家界的天門山玉蟾宮,玉蟾宮宮主藍兔盛情地款待了它們,並賜予它們一片土地。

這片土地被分成n*m個格仔,每個格仔裡寫著』r』或者』f』,r代表這塊土地被賜予了rainbow,f代表這塊土地被賜予了freda。

現在freda要在這裡賣萌。。。它要找一塊矩形土地,要求這片土地都標著』f』並且面積最大。

但是rainbow和freda的oi水平都弱爆了,找不出這塊土地,而藍兔也想看freda賣萌(她顯然是不會程式設計的……),所以它們決定,如果你找到的土地面積為s,它們每人給你s兩銀子。

輸入描述 input description

第一行兩個整數n,m,表示矩形土地有n行m列。

接下來n行,每行m個用空格隔開的字元』f』或』r』,描述了矩形土地。

輸出描述 output description

輸出乙個整數,表示你能得到多少銀子,即(3*最大』f』矩形土地面積)的值。

樣例輸入 sample input

5 6

r 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

樣例輸出 sample output

資料範圍及提示 data size & hint

對於50%的資料,1<=n,m<=200

對於100%的資料,1<=n,m<=1000

話說這是一道單調棧的題,求最大子矩形面積;

但暴力可做???

加幾個優化,n^3能過;

可是我太弱,調了n年80分,最後wzhd』神牛orz一語道醒夢中人;

總之還是要勤練,**可以不對,但思路不能出現誤差;

#include

#include

#include

#include

using

namespace

std;

int n,m,dp[2001][2011],ma[2001][2011],ans=-1,d[2001],inf=1e9;

char s[2333];

void solve()

for(int i=1;i<=n;i++)

for(int j=1;j<=m;j++)

dp[i][j]=ma[i][j]*(dp[i-1][j]+1),d[i]=max(d[i],dp[i][j]);//這裡很巧妙;

for(int i=1;i<=n;i++) ans=max(ans,d[i]);

for(int i=1;i<=n;i++)}}

cout

<3;

}int main()

來個單調棧版本的

依矩形高度單調上公升;

注意:

1.sq :指棧頂元素高度的矩形最左邊的座標;

2.對於高度相同的矩形,只入棧乙個即可,因為我們已經記錄了座標,不會丟失;

3.彈棧時,邊彈邊更新面積;

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=2001;

struct hh ;

int a[maxn][maxn],dp[maxn][maxn],n,m,b[maxn],ans=-1,sq;

char ss[233];

stack

s;hh x,q;

void solve()

for(int i=1;i<=n;i++)

for(int j=1;j<=m;j++)

dp[i][j]=a[i][j]*(dp[i-1][j]+1);

for(int i=1;i<=n;i++)

for(int j=1;j<=m+1;j++)

q.pos=sq,s.push(q);}}

}cout

<3;

}int main()

cv2491 玉蟾宮(極大子矩陣)

題目描述 description 有一天,小貓rainbow和freda來到了湘西張家界的天門山玉蟾宮,玉蟾宮宮主藍兔盛情地款待了它們,並賜予它們一片土地。這片土地被分成n m個格仔,每個格仔裡寫著 r 或者 f r代表這塊土地被賜予了rainbow,f代表這塊土地被賜予了freda。現在freda...

最大矩形面積

題目描述 地面上從左到右併排緊挨著擺放多個矩形,已知這此矩形的底邊寬度都為1,高度不完全相等。求在這些矩形包括的範圍內能得到的面積最大的矩形,列印出該面積。所求矩形可以橫跨多個矩形,但不能超出原有矩形所確定的範圍。如 n 7,序列為2 1 4 5 1 3 3 h h h h h h h h 最大面積...

最大矩形面積

地面上從左到右併排緊挨著擺放多個矩形,已知這此矩形的底邊寬度都為1,高度不完全相等。求在這些矩形包括的範圍內能得到的面積最大的矩形,列印出該面積。所求矩形可以橫跨多個矩形,但不能超出原有矩形所確定的範圍。如 n 7,序列為2 1 4 5 1 3 3 h h h h h h h h 最大面積 8 輸入...