bzoj1096 倉庫建設

2021-07-05 23:48:36 字數 1565 閱讀 3761

l公司有n個工廠,由高到底分布在一座山上。如圖所示,工廠1在山頂,工廠n在山腳。 由於這座山處於高原內陸地區(乾燥少雨),l公司一般把產品直接堆放在露天,以節省費用。突然有一天,l公司的總裁l先生接到氣象部門的**,被告知三天之後將有一場暴雨,於是l先生決定緊急在某些工廠建立一些倉庫以免產品被淋壞。由於地形的不同,在不同工廠建立倉庫的費用可能是不同的。第i個工廠目前已有成品pi件,在第i個工廠位置建立倉庫的費用是ci。對於沒有建立倉庫的工廠,其產品應被運往其他的倉庫進行儲藏,而由於l公司產品的對外銷售處設定在山腳的工廠n,故產品只能往山下運(即只能運往編號更大的工廠的倉庫),當然運送產品也是需要費用的,假設一件產品運送1個單位距離的費用是1。假設建立的倉庫容量都都是足夠大的,可以容下所有的產品。你將得到以下資料: 工廠i距離工廠1的距離xi(其中x1=0);  工廠i目前已有成品數量pi;  在工廠i建立倉庫的費用ci; 請你幫助l公司尋找乙個倉庫建設的方案,使得總的費用(建造費用+運輸費用)最小。

第一行包含乙個整數n,表示工廠的個數。接下來n行每行包含兩個整數xi, pi, ci, 意義如題中所述。

僅包含乙個整數,為可以找到最優方案的費用。 3

0 5 10

5 3 100

9 6 10

32在工廠1和工廠3建立倉庫,建立費用為10+10=20,運輸費用為(9-5)*3 = 12,總費用32。如果僅在工廠3建立倉庫,建立費用為10,運輸費用為(9-0)*5+(9-5)*3=57,總費用67,不如前者優。

【資料規模】

對於100%的資料, n ≤1000000。 所有的xi, pi, ci均在32位帶符號整數以內,保證中間計算結果不超過64位帶符號整數。 

分析:這個資料只能o(n)

設f【i】為從1到i的貨物,運輸到第i點的費用

sum[i]為1到i的貨物和

dp方程可表示  dp【i】=min(dp【j】+f[i]-f[j]-(x[i]-x[j])*sum[j])

有x【i】*sum【j】項

dp斜率優化即可

**:

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

long long n;

long long x[1000001],p[1000001],c[1000001]; //x 距離 p 貨物 c 倉庫

long long f[1000001]; //自由下落的value

long long sum[1000001]; //貨物和

long long y[1000001];

long long que[1000001];

long long dp[1000001];

long long read()

while(c<='9'&&c>='0')

return k*f;

}int main()

long long tail=1;

long long head=1;

y[0]=0;

que[tail]=0;

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

cout<

BZOJ1096 倉庫建設

目錄題目傳送門 也是一道比較經典的斜率優化 dp 很容易推出dp轉移方程 dp i min dp j cost i,j c i 重點就是怎麼快速的算出cost i,j 我們把cost的計算公式寫出來 cost i,j sum ip k x i x k x i sum ip k sum ip k x ...

倉庫建設(bzoj 1096)

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

bzoj1096 倉庫建設 斜率優化

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