/*
目錄錯誤
**
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要在這裡賣...