19暑假dp優化

2021-09-26 01:49:59 字數 1386 閱讀 4865

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

30 5 10

5 3 100

9 6 10

sample output

32hint

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

dp斜率優化

#include#define ll long long 

#define n 1000005

using namespace std;

int n, l;

int head, tail, q[n];

long long a[n], f[n],b[n];

int x[n],p[n],c[n];

inline long long getans(int i,int j)

inline bool cmp(int i, int j, int k)

void solve()

}int main()

solve();

printf("%lld\n", f[n]);

return 0;

}

19暑假線性基B

input 第一行包含乙個正整數n,表示礦石的種類數。接下來 n行,每行兩個正整數numberi 和 magici,表示這種礦石的元素序號 和魔力值。output 僅包一行,乙個整數 最大的魔力值 sample input 31 10 2 20 3 30 sample output 50hint 由...

19暑假線性基C

第一行包含兩個整數n和 m,表示該無向圖中點的數目與邊的數目。接下來m 行描述 m 條邊,每行三個整數si,ti di,表示 si 與ti之間存在 一條權值為 di的無向邊。圖中可能有重邊或自環。output 僅包含乙個整數,表示最大的xor和 十進位制結果 注意輸出後加換行回車。sample in...

19暑假線性基F

已知乙個長度為n的正整數序列a 下標從1開始 令 s s 的冪集2 s定義為s 所有子 集構成的集合。定義對映 f 2 s zf 空集 0f t xor a t 對於一切t屬於t現在albus把2 s中每個集 合的f值計算出來,從小到大排成一行,記為序列b 下標從1開始 給定乙個數,那麼這個數在序列...