ZJOI2007 倉庫建設 斜率優化dp

2022-06-07 05:18:12 字數 577 閱讀 8909

大腦真是個很優秀的器官,做事情之前總會想著這太難,真的逼著自己做下去,回頭看看,其實也不過如此

很樸素的斜率優化dp了

首先要讀懂題目(我的理解能力好bug啊)

然後設\(dp[i]\)表示處理完前\(i\)個傢伙,並且在第\(i\)個傢伙處建倉的答案

那麼有\[dp[i] = min_^\^ p[k] * (x[i] - x[k])\} + c[i]

\]化簡發現,優劣比較條件為

\[\frac < x[i]

\]於是就皆大歡喜啦

#include using namespace std;

#define int long long

const int n = 1000005;

int n,x[n],p[n],c[n],s[n],t[n],f[n],q[n],l,r;

double slope(int k,int j)

signed main()

l=1; r=1;

for(int i=1;i<=n;i++)

cout<}

ZJOI2007 倉庫建設

l公司有n個工廠,由高到底分布在一座山上。如圖所示,工廠1在山頂,工廠n在山腳。由於這座山處於高原內陸地區 乾燥少雨 l公司一般把產品直接堆放在露天,以節省費用。突然有一天,l公司的總裁l先生接到氣象部門的 被告知三天之後將有一場暴雨,於是l先生決定緊急在某些工廠建立一些倉庫以免產品被淋壞。由於地形...

ZJOI 2007 倉庫建設

注意到我們所有的東西都只能轉移到後面,那麼可以考慮dp 用dp i 表示以i結尾建立倉庫的最小花費 那麼dp i min dp i dp j w i sigma dis i dis k num k 這個dp直接轉移是n 2 考慮優化這個dp 然後他是由前面所有的轉移過來,而且還有其他的陣列來計算答案...

ZJOI2007 倉庫建設

傳送門 考慮用dp i 表示把前i個地點的物品全部安置好的最小花費。因為物品只能往下運,所以當前這個位置必須建倉庫,dp方程很好想 dp i min p k x i x k c i 用 sum n 表示 sum np i ssum n 表示 sum np i x i 之後把式子變個型套斜率優化就好了...