BZOJ1096 ZJOI2007 倉庫建設

2021-08-09 03:49:29 字數 2008 閱讀 5516

標籤:斜率優化

description

l公司有n個工廠,由高到底分布在一座山上。如圖所示,工廠1在山頂,工廠n在山腳。由於這座山處於高原內

陸地區(乾燥少雨),l公司一般把產品直接堆放在露天,以節省費用。突然有一天,l公司的總裁l先生接到氣象

部門的**,被告知三天之後將有一場暴雨,於是l先生決定緊急在某些工廠建立一些倉庫以免產品被淋壞。由於

地形的不同,在不同工廠建立倉庫的費用可能是不同的。第i個工廠目前已有成品pi件,在第i個工廠位置建立倉庫

的費用是ci。對於沒有建立倉庫的工廠,其產品應被運往其他的倉庫進行儲藏,而由於l公司產品的對外銷售處設

置在山腳的工廠n,故產品只能往山下運(即只能運往編號更大的工廠的倉庫),當然運送產品也是需要費用的,

假設一件產品運送1個單位距離的費用是1。假設建立的倉庫容量都都是足夠大的,可以容下所有的產品。你將得到

以下資料:1:工廠i距離工廠1的距離xi(其中x1=0);2:工廠i目前已有成品數量pi;:3:在工廠i建立倉庫的費用

ci;請你幫助l公司尋找乙個倉庫建設的方案,使得總的費用(建造費用+運輸費用)最小。

input

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

output

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

sample input

3

0 5 10

5 3 100

9 6 10

sample output

32

hint

在工廠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位帶符號整數。 

f[i]=min

work(j+1,i)表示將j+1到i的物品移往i的運輸費用

難點就是在o(1)的時間內求出work(j+1,i)

可以利用字首和的思想,sum[i]表示p[i]的字首和

如果所有物品都從起始點0開始運到i,則費用為(sum[i]-sum[j])*x[i]

但由於物品的起始點不在0,那麼每個物品可以少花費x[i]*p[i]

b[i]表示x[i]*p[i]的字首和

那麼f[i]=min(f[j]+(sum[i]-sum[j])*x[i]-(b[i]-b[j])+c[i]

如果j>k且j比k更優,斜率優化下

(f[j]-f[k]+b[j]-b[k])/ (sum[j]-sum[k])< x[i]

code

#include#define rep(i,a,b) for(int i=a;i<=b;i++)

#define dep(i,a,b) for(int i=a;i>=b;i--)

#define ll long long

#define mem(x,num) memset(x,num,sizeof x)

using namespace std;

inline ll read()

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

return x*f;

}const int maxn=1e6+6;

ll n,head,tail,p[maxn],x[maxn],c[maxn],f[maxn],b[maxn],sum[maxn],q[maxn];

inline double slop(int k,int j)

int main()

rep(i,1,n)

cout<

bzoj 1096 ZJOI2007 倉庫建設

time limit 10 sec memory limit 162 mb submit 3607 solved 1582 submit status discuss l公司有n個工廠,由高到底分布在一座山上。如圖所示,工廠1在山頂,工廠n在山腳。由於這座山處於高原內 陸地區 乾燥少雨 l公司一般把...

bzoj 1096 ZJOI2007 倉庫建設

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

bzoj1096 ZJOI2007 倉庫建設

1a系列。用f i 表示在 i 這個點建立倉庫的,前i個工廠的貨物都能藏起來的最小費用。顯然f i c i min w j,i f j 其中 w j,i 表示把 j i 的貨物都運到 i 的費用 w j,i k j 1i p k x i x k x i k j 1ip k k j 1ip k x k...