P4147 玉蟾宮 懸線dp

2021-10-19 08:37:54 字數 1064 閱讀 5364

傳送門

歷史遺留問題,直到現在才來學這玩意…

考慮每個點能往上最多延伸up[

i][j

]up[i][j]

up[i][

j]個格仔,把延申的豎線叫做懸線

把這根懸線左移移動可以得到最大的長,那麼長乘寬就是這根懸線能得到的最大長度

把所有懸線能得到的最大矩陣算出來就是答案了

那麼預處理l[i

][j]

,r[i

][j]

l[i][j],r[i][j]

l[i][j

],r[

i][j

]分別表示往左/右延伸能得到的最大距離

然後當上下都無障礙時,說明這跟懸線需要同時受到上下的限制

if

( i>=

2&&a[i-1]

[j]&&a[i]

[j])

完整**非常簡單了

#include

using

namespace std;

const

int maxn =

1009

;int a[maxn]

[maxn]

,l[maxn]

[maxn]

,r[maxn]

[maxn]

,up[maxn]

[maxn]

,n,m;

intmain()

for(

int i=

1;i<=n;i++

)int ans =0;

for(

int i=

1;i<=n;i++

)for

(int j=

1;j<=m;j++

) ans =

max( ans,

(r[i]

[j]+l[i]

[j]-1)

*up[i]

[j]);}

cout << ans*3;

}

P4147 玉蟾宮 懸線法求最大子矩陣

p4147 玉蟾宮 懸線法,l r up 分別表示 i,j 這個點向左,右,上能到達的遠點。然後面積就很好辦了。具體實現見 然而,還有更優秀的演算法,可是我還沒學會嚶嚶嚶,可以看看這題 p1578 奶牛浴場 includeusing namespace std const int n 1005 in...

玉蟾宮 洛谷P4147

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

P4147 玉蟾宮 單調棧

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