bzoj 3156 防禦準備

2021-08-01 15:46:49 字數 801 閱讀 6149

第一行為乙個整數n表示戰線的總長度。

第二行n個整數,第i個整數表示在位置i放置守衛塔的花費ai。

共乙個整數,表示最小的戰線花費值。

10

2 3 1 5 4 5 6 3 1 2

181<=n<=10^6,1<=ai<=10^9

暴力就不多說了

#include#include#include#include#includeusing namespace std;

#define ll long long

ll a[2000000];

ll f[2000000][3];

int main()

int main(){

int n;

scanf("%d",&n);

for (int i=1;i<=n;++i) scanf("%lld",&a[i]);

int l=1,r=1;

q[1]=n;

f[n][1]=a[n];

f[n][0]=1ll<<60;

for (int i=n-1;i>=1;--i){

f[i][1]=a[i]+min(f[i+1][0],f[i+1][1]);

while (li) ++l;

f[i][0]=f[q[l]][1]+(q[l]+1-i)*(q[l]-i)/2;

while (lcheck(i,q[r])) --r;

++r;

q[r]=i;

//cout<

BZOJ 3156 防禦準備

1 n放城堡 木偶,在第i位放城堡的 cost i 給出,放木偶的 cost i j i j為i右邊第乙個城堡 問最小花費普通 theta dp會掛 n leq 100000 需要斜率優化,為了方便,我們從左往右dp f i 為在這個點放城堡的最小花費 因為第n個必須放城堡 f i min j i ...

bzoj3156防禦準備

bzoj3156防禦準備 題意 n個檢查點,在第i個檢查點放置塔花費a i 放置木偶花費為該位置右邊最近乙個塔離它的距離。求最小花費。n 1000000 題解 從右往左處理。在第i個點放塔的費用f i min a i 用等差數列求和公式化簡後作斜率dp,具體看 反思 本弱公式總是推錯,要穩!1 in...

BZOJ 3156 防禦準備

第一行為乙個整數n表示戰線的總長度。第二行n個整數,第i個整數表示在位置i放置守衛塔的花費ai。共乙個整數,表示最小的戰線花費值。102 3 1 5 4 5 6 3 1 2 181 n 10 6,1 ai 10 9 這道題顯然是一道dp的題。一眼看去,顯然可以令 f i 表示第 i 個位置放防禦塔的...