BZOJ 3039 玉蟾宮 懸線法

2022-02-06 16:27:02 字數 1374 閱讀 4917

最大子矩陣...懸線法..時間複雜度o(nm)

懸線法就是記錄乙個h向上延伸的最大長度(懸線), l, r向左向右延伸的最大長度, 然後通過遞推來得到. 

#include

using namespace std;

#define ok(c) ((c) == 'f' || (c) == 'r')

const int maxn = 1009;

int h[maxn][maxn], l[maxn][maxn], r[maxn][maxn], n, m;

bool f[maxn][maxn];

void read()

}int main()

memset(h, 0, sizeof h);

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

for(int j = 0; j < m; j++) if(f[i][j] && f[i - 1][j])

int ans = 0;

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

for(int j = 0; j < m; j++) if(f[i][j])

ans = max(ans, (h[i][j] + 1) * (l[i][j] + r[i][j] - 1));

cout << 3 * ans << "\n";

return 0;

}time limit: 2 sec  memory limit: 128 mb

submit: 581  solved: 352

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

這片土地被分成n*m個格仔,每個格仔裡寫著'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

poetize4

BZOJ 3039 玉蟾宮 懸線法

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

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

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

bzoj3039 玉蟾宮 單調棧

題目描述 給定乙個01矩陣,找出乙個面積最大的子矩陣,使得其中的元素均為1。輸出這個最大面積乘3。輸入第一行兩個整數n,m,表示矩形土地有n行m列。接下來n行,每行m個用空格隔開的字元 f 或 r 描述了矩形土地。輸出輸出乙個整數,表示你能得到多少銀子,即 3 最大 f 矩形土地面積 的值。樣例輸入...