洛谷 2120 ZJOI2007 倉庫建設

2021-09-29 06:10:22 字數 1562 閱讀 4428

題目描述

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, 意義如題中所述。

輸出格式

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

輸入輸出樣例

輸入 #1

30 5 10

5 3 100

9 6 10

輸出 #1

32

說明/提示

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

解釋:斜率優化,老套路

f [j

]−f[

k]s[

j]−s

[k

]<−d

[i

]\frac<-d[i]

s[j]−s

[k]f

[j]−

f[k]

​<−d

[i],然後直接上模板就好了,其中f[i]表示在i點建倉庫的費用就行啦

其中d[i]表示i到山腳的距離,s[i]表示成品數量的字首和,c[i]是建倉庫的費用

#include#define n 1000003

using namespace std;

int n=0;

long long x[n]=,p[n]=,c[n]=;

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

long long dp[n]=;

int q[2*n]=;

double cal(int x,int y)

int main()

for(int i=1,l=1,r=1;i<=n;i++)

cout

}

洛谷 P2120 ZJOI2007 倉庫建設

題幹重點 第i個工廠目前已有成品ai件,在第i個工廠位置建立倉庫的費用是bi。對於沒有建立倉庫的工廠,其產品應被運往其他的倉庫進行儲藏 只能運往編號更大的工廠的倉庫,一件產品運送1個單位距離的費用是1 告訴你工廠的位置,在每乙個工廠建立倉庫的費用,以及它們原有產品的個數,產品只能往編號高的地方運,求...

洛谷 P1169 ZJOI2007 棋盤製作

西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 times 88 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好...

洛谷 P1169 ZJOI2007 棋盤製作

給定乙個n m的01矩陣,尋找最大的,相鄰值不相同的子矩陣與子方陣。n,m leq 2,000 樸素的做法是列舉兩個點來確定矩陣,再暴力判斷能不能滿足條件。複雜度 o n 4 考慮優化 判斷能不能滿足條件時,存在很多重複判斷,可以預處理。但是,怎樣進行預處理呢?這就需要我們改變列舉方式,簡化預處理的...