bzoj 3156 防禦準備 斜率優化 DP

2021-06-28 01:28:47 字數 944 閱讀 1466

傳送門:

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

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

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

10

2 3 1 5 4 5 6 3 1 2

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

斜率優化+dp

因為最後乙個一定為守衛塔,所以輸入時預處理到過來,接下來說的前i個其實是實際的後i個,反之亦然。

設f[i]為前i個檢查點的最小費用,val[i]為在i處建塔的費用

假設在檢查點i後,在j建塔比在k建塔費用更小(j>k之前均放置木偶)

f[j]=f[i]+(j-i-1)*(1+j-1-i)/2+val[j]

即(j-i-1)*(j-i)/2+val[j]

(j-i-1)*(j-i)-(k-i-1)*(k-i)<2*(val[k]-val[j])

(j-i)^2-j+i-(k-i)^2+k-i<2*(val[k]-val[j])

j^2-k^2-2*(j-k)*i+k-j<2*(val[k]-val[j])

(j^2-k^2+k-j-2*(val[k]-val[j]))/2*(j-k)

很好推吧,推出來了就出來了~~~~

#include#include#include#define maxn 1100000

using namespace std;

typedef long long ll;

ll n,head,tail;

ll q[maxn],f[maxn],val[maxn],ans;

double get(ll k,ll j)

int main()

printf("%lld",ans);

return 0;

}

BZOJ3156 防禦準備 斜率優化

第一行為乙個整數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處放置守衛塔,且i左面...

BZOJ3156 防禦準備(斜率優化dp)

題目 我是超連結 題解 woc!調了一大節課,還對拍樣程 完全沒有問題啊,拍了一晚上都不帶錯的 結果看好數量級之後強轉longlong才a了 第一種解法 兩個點之間的距離是 i j i j 1 2 方程 f i min f j i j i j 1 2 a i include include defi...

BZOJ3156 防禦準備 斜率優化dp

time limit 10 sec memory limit 512 mb submit 2207 solved 933 submit status discuss 第一行為乙個整數n表示戰線的總長度。第二行n個整數,第i個整數表示在位置i放置守衛塔的花費ai。共乙個整數,表示最小的戰線花費值。10...