bzoj4709 檸檬 單調棧,DP,斜率優化

2022-03-01 04:46:19 字數 952 閱讀 8709

/*

目錄錯誤

**

s是值等於a[i]的字首和

轉移方程$f[i]=max(f[i],f[j-1]+a[i]*(s[i]-s[j]+1)*(s[i]-s[j]+1))$

不難寫出暴力方程(by wxyww)

//@baoli

memset(f,-0x3f,sizeof(f));

f[0]=0;

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

}}

關於此題的單調性

特性1每一段分出來的都一定是兩端相同的,顯然

特性2他滿足斜率單調,也就是要維護凸包

ll x(int i) 

ll y(int i)

特性3

如果\(j且\(f_+a*(s-s+1)^2 > f+a*(s-s+1)^2\)

顯然,f和s都是單增的

那麼對於i以後的點都是j決策大於k決策

為何?顯然(我只能這樣說),大概可以理解為\(s-s\)的變化量比\(s-s\)大0

總結思路,把他們用棧一起維護起來就是了?全程懵逼

#include #include #define ll long long

using namespace std;

const int n=1e5+7;

int n,a[n],s[n],vis[n],top[n];

ll f[n];

vectorq[n];

ll x(int i)

ll y(int i)

long double calc(int j,int k)

ll dp(int i,int j)

int main()

printf("%lld\n", f[n]);

return 0;

}

BZOJ4709 檸檬(動態規劃,單調棧)

bzoj 從左取和從右取沒有區別,本質上就是要分段。設f i f i 表示前 i i 個位置的最大值。那麼相當於我們列舉乙個前面的位置 j role presentation j j,然後找到這一段中最大的s0 t2s 0t 2但是這樣子很不優秀。我們貪心的思考一下,既然這一段最後加起來只能變成某乙...

BZOJ 3039 玉蟾宮(DP 單調棧)

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

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

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