題幹:略。
暴力做法:o(n^2),強行無腦dp。
整解:s1為一維字首和,s2為二維字首和(存 b[i]*i)
f[i] = min( f[j] + i*(s1[i]-s1[j]) - (s2[i] - s2[j]));
若 j 優於 k
則有 ( (f[ j ]+s2[ j ]) - ( f[ k ]+s2[ k ] ) ) / ( s1[ j ] - s1[ k ] ) < i
然後想起來 △y / △x = k
發現這道題是一道斜率優化的dp題。(但是並不需要維護凸包)
**:
#include#includeusing
namespace
std;
#define ll long long
#define n 1000050
intn;
ll a[n],b[n],s1[n],s2[n],f[n];
ll x(
inti)
ll y(
inti)
ll q[n],hd,tl;
intmain()
for(ll i=1;i<=n;i++)
printf(
"%i64d\n
",f[n]);
return0;
}
bzoj 3437 小P的牧場
方程不難寫出fi max j 0 i 其中w j i 表示前 i 個牧場中,在 i處建立最後乙個檢查站,在 j 處建立倒數第二個檢查站的最小化費 這裡的w可以用兩個字首和求出,s1 i b i s2 i 1 a i 1 2 a i 2 3 a i 3 i 1 a 1 那麼w l,r s2 r s 2...
bzoj3437 小P的牧場
description 小p在mc裡有n個牧場,自西向東呈一字形排列 自西向東用1 n編號 於是他就煩惱了 為了控制這n個牧場,他需要在某些牧場上面建立控制站,每個牧場上只能建立乙個控制站,每個控制站控制的牧場是它所在的牧場一直到它西邊第乙個控制站的所有牧場 它西邊第乙個控制站所在的牧場不被控制 如...
BZOJ3437 小p的牧場
小p 在mc 裡有n 個牧場,自西向東呈一字形排列 自西向東用1 n 編號 於是他就煩惱了 為了控制這n 個牧場,他需要在某些牧場上面建立控制站,每個牧場上只能建立乙個控制站,每個控制站控制的牧場是它所在的牧場一直到它西邊第乙個控制站的所有牧場 它西邊第乙個控制站所在的牧場不被控制 如果它西邊不存在...