Jzoj3169 生產汽車

2021-08-14 10:10:45 字數 1238 閱讀 3399

如前面提到,abc的汽車工廠有n個工人,他們在乙個傳送帶上生產汽車,工人從左到右排列,編號依次為1到n,採用流水線模式,每個人負責自己的一部分工作。

生產一台汽車需要從1號工人開始,當1號完成他的工作後,2號就會開始工作,然後是3號,最後當n號工人完成他的工作後,整個汽車生產完畢。工人們一共需要生產m臺汽車,而且必須按照從1到m的順序去生產。

對於工人i,他完成自己的工作需要ti的時間,而對於汽車j,組裝複雜度為fj。那麼工人i花在汽車j上的時間為ti*fj。

當某個工人完成他的工作後,他會同時把汽車交給下乙個工人,沒有任何時間上的延遲,因此,要保證下乙個要接受汽車的工人必須是空閒的。為了滿足這個要求,abc需要為每一台汽車選擇乙個好時機開始製造。

abc想知道生產完所有汽車最少需要多少時間。

先來考慮o(n^2)的情況

我們令g[i]表示第i輛汽車開始生產的時間,g[1]=0

那麼g[i]=g[i-1]+max(f[i-1]*sum[j]+f[i]*sum[j-1]) 其中sum[j]=σt[k] (1<=k<=j)

這裡表示每乙個人都必須在它生產完i-1這輛車之後才能繼續第i輛,看到這個式子我們可以考慮斜率優化

對於決策j,k若k優於j那麼就有

f[i-1]*s[j]+f[i]*s[j-1]f[i-1]*(s[j]-s[k])

f[i-1]/f[i]<(s[j-1]-s[k-1])/(s[j]-s[k])

因為f[i-1]/f[i]不單調,所以我們維護乙個斜率單調遞減的上凸殼,讓後在上面二分

#pragma gcc opitmize("o3")

#pragma g++ opitmize("o3")

#include

#include

#include

#define n 100010

using

namespace

std;

int n,m,q[n],t=0;

long

long f[n],s[n],g[n];

inline

double slp(int i,int j)

int main()

g[1]=0;

for(int i=2,l,r,m;i<=m;++i)

g[i]=g[i-1]+s[q[l]]*f[i-1]-s[q[l]-1]*f[i];

} printf("%lld\n",1ll*g[m]+s[n]*f[m]);

}

Jzoj3169 生產汽車

如前面提到,abc的汽車工廠有n個工人,他們在乙個傳送帶上生產汽車,工人從左到右排列,編號依次為1到n,採用流水線模式,每個人負責自己的一部分工作。生產一台汽車需要從1號工人開始,當1號完成他的工作後,2號就會開始工作,然後是3號,最後當n號工人完成他的工作後,整個汽車生產完畢。工人們一共需要生產m...

11 9 生產環境部署

fabric ca在整個證書管理環節中處於十分核心的位置。在生產環境中部署時,必須從多個方面進行考慮,以充分確保安全性 可靠性 規範性等指標。1.根證書的生成 根證書目前可以通過從權威機構 包括golbalsign verisign 申請,或採用自行簽名的方式生成。技術上來講,兩者都可以完成部署過程...

2018 9 28 生產問題備註回憶

生產問題總結 表現 1 應用伺服器掛了2臺,資料庫服務記憶體突然公升高 2 資料庫資料許可權表查詢超時 原因 大批量的人為匯入excel同時操作,1 匯入前會檢驗使用者許可權,預設載入在快取裡,但此時redis快取沒有起作用,導致大量請求直接查詢資料庫,造成超時。2 檢驗後,計算實時資料時,取預留比...