BZOJ 3156 防禦準備

2021-09-01 20:51:15 字數 972 閱讀 2387

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+fj

+1+2

+⋯+(

i−j−

1)(j

為i左邊

第乙個城

堡)

f_i=\min\limits_

設xj​=j

,yj​

=fj​

+2j(

j−1)

​ 然後斜率優化\(\ y_j\)找錯

#include

#include

#include

#define inf 0x3f3f3f3f

#define maxn 1000005

#define int long long

using

namespace std;

int f[maxn]

, q[maxn]

, a[maxn]

;int l, r, n, sum[maxn]

;inty(

int id)

double

slope

(int id1,

int id2)

signed

main()

l =0, r =0;

for(

int i =

1; i <= n; i++

)printf

("%lld\n"

, f[n]);

return0;

}

bzoj 3156 防禦準備

第一行為乙個整數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 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 個位置放防禦塔的...