Jzoj1968 設計鐵路

2022-05-09 14:21:11 字數 1102 閱讀 9288

a省有一條東西向的公路經常堵車,為解決這一問題,省**對此展開了調查。調查後得知,這條公路兩側有很多村落,每個村落裡都住著很多個信仰c教的教徒,每週日都會開著自家的車沿公路到b地去「膜拜」他們的教主,這便是堵車的原因。詳細調查顯示:這裡總共有n個村落,並且它們都在b地的東邊。編號為i的村落住有ti個信仰c教的教徒,距離b地的距離為ri(單位:公里)。   

為解決這一問題,a省**決定在這條公路下修建一條地下快速鐵路來緩解交通,並沿線修建若干個車站(b地會修建終點站,不算車站)。每名教徒都會先往b地方向開車(如果他所在村莊處恰好有車站就不必開車了),到最近的乙個快速鐵路車站時換乘(如果直接開到b地就不用換乘了),再通過快速鐵路到b地。   

但a**遇到乙個難題:修建多少個車站以及在哪修建車站。乙個修建車站的方案中,如果修建過多的車站則會花費過多的錢,但修建的車站少了或者修建的位置不對又會導致公路的擁堵。a**為了協調這兩方面,採用評分的方式來衡量乙個方案的好壞(分數越大方案越壞):每修建乙個車站會增加m的分數,在某一次「膜拜」中(只考慮去,不考慮返回),每導致1個教徒開車行駛1公里會增加1分。   

現請你設計乙個修建車站的方案,使得分數最小。請輸出這個最小的分數。

我們考慮用dp來解決

設f[i]表示最後乙個車站修在i的最大貢獻值

那麼顯然我們可以發現f[i]=max(f[j]+(r[i]-r[j])*s[i]) (這裡s[i]=σt[j],i<=j<=n)

這是乙個非常簡單的斜率優化式子,斜率表示式就是△f/△r

答案就是-max+σr[i]*t[i] (1<=i<=n),注意r[i]相等的幾項要合併

#include

#include

#include

#define ll long long

using

namespace

std;

int n,m,n,q[50010],h,t;

ll r[50010],s[50010],f[50010],s,m;

inline

double sl(int j,int k)

struct p w[50010];

inline

bool cmp(p a,p b)

bzoj 2153 設計鐵路

time limit 5 sec memory limit 259 mb submit 295 solved 172 submit status discuss a省有一條東西向的公路經常堵車,為解決這一問題,省 對此展開了調查。調查後得知,這條公路兩側有很多村落,每個村落裡都住著很多個信仰c教的教...

鐵路訂票系統的簡單設計

本文可以應對海量併發業務請求的問題思想的解答 其實鐵路訂票系統面臨的技術難點無非就是春運期間可能發生的海量併發業務請求。這個加上乙個排隊系統就可以輕易解決的。本來我在 weibo 上閒扯兩句,這麼簡單的方案,本以為大家一看就明白的。沒想到還是許多人有疑問。好吧,寫篇 blog 來解釋一下。簡單說,我...

基於微控制器CAN匯流排的鐵路燈模擬監控設計

include include define uchar unsigned char 巨集定義 define uint unsigned int 巨集定義 sbit l0 p1 0 0和1指令顯示資訊引腳 sbit l1 p1 1 0和1指令顯示資訊引腳 sbit l2 p1 2 0和1指令顯示資訊...