BZOJ3039 玉蟾宮(懸線dp 單調棧)

2021-09-27 14:31:59 字數 2519 閱讀 6062

description

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

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

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

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

input

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

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

output

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

sample input

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

sample output

45hint

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

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

source

poetize4

思路:記錄每個點最高能到達的懸線,然後對這個懸線向左向右平移得到極大子矩陣。列舉每個所以豎直懸線,就能得到所有極大子矩陣,取最大即可。

單調棧:先預處理出高度,然後在每一行上維護長度,這就成了經典的柱形圖最大矩陣問題了。

**用極大化思想解決最大子矩形問題–王知昆:

acnew

#include

#include

#include

using

namespace std;

const

int maxn =

1005

;int a[maxn]

[maxn]

,left[maxn]

[maxn]

,right[maxn]

[maxn]

,up[maxn]

[maxn]

;int

main()

}int ans =0;

for(

int i =

1;i <= n;i++

)else

}for

(int j = m;j >=

1;j--

)else}}

printf

("%d\n"

,ans *3)

;return0;

}

#include

#include

#include

using

namespace std;

int maze[

1005][

1005];

int rightt[

1005][

1005

], leftt[

1005][

1005

],up[

1005][

1005];

intmain()

}int ans =0;

for(

int i =

1;i <= n;i++

)else

}for

(int j = m;j >=

1;j--

)else}}

printf

("%d\n"

,ans *3)

;return0;

}

單調棧寫法

#include

#include

#include

using

namespace std;

const

int maxn =

1007

;struct node

stk[maxn]

;int a[maxn]

[maxn]

,h[maxn]

[maxn]

;int

main()

}for

(int i = n;i >=

1;i--)}

}int ans =0;

for(

int i =

1;i <= n;i++

) stk[

++top]

.h = h[i]

[j];stk[top]

.d = d +1;

}int d =0;

while

(top)

}printf

("%d\n"

,ans *3)

;return0;

}

BZOJ 3039 玉蟾宮 懸線法

題目大意 給出一張地圖,求出這張地圖中最大的子矩陣,使得這個子矩陣不包含字母 r 思路 簡單的懸線法求最大子矩陣,還是不帶權值的,很好求。好久沒寫懸線了,複習一下。code include include include include define max 1010 using namespace...

BZOJ 3039 玉蟾宮 懸線法

最大子矩陣.懸線法.時間複雜度o nm 懸線法就是記錄乙個h向上延伸的最大長度 懸線 l,r向左向右延伸的最大長度,然後通過遞推來得到.include using namespace std define ok c c f c r const int maxn 1009 int h maxn max...

BZOJ 3039 玉蟾宮(DP 單調棧)

每次看到我的提交都有點淡淡的憂傷t t。看到此題我想到用字首和維護點ij向左和向上能拓展的最大長度,然後設狀態f i,j,0 表示ij這個點為最大矩形的右下角時的長 橫的 f i,j,1 表示ij這個店為最大矩形右下角時的寬 豎的 然後決策就是取點 i 1,j 1 的f值拓展一層為ij的,找到乙個可...