一本通1608 例 3 任務安排 3

2022-05-08 01:57:09 字數 2061 閱讀 8728

時間限制: 1000 ms         記憶體限制: 524288 kb

有 n'>

n 個任務排成乙個序列在一台機器上等待執行,它們的順序不得改變。機器會把這 n

'>

n 個任務分成若干批,每一批包含連續的若干個任務。從時刻 0

'>

0 開始,任務被分批加工,執行第i個任務所需的時間是 t

i'>

ti。另外,在每批任務開始前,機器需要 s

'>s

的啟動時間,故執行一批任務所需的時間是啟動時間 s

'>s

加上每個任務所需時間之和。

乙個任務執行後,將在機器中稍作等待,直至該批任務全部執行完畢。也就是說,同一批任務將在同一時刻完成。每個任務的費用是它的完成時刻乘以乙個費用係數 c

i'>

ci 。

請為機器規劃乙個分組方案,使得總費用最小。

第一行兩個整數,分別為 n,s

'>

n,s;

接下來 n

'>

n 行每行兩個整數 ti,

ci'>ti

,ci 。

乙個數,最小的總費用。

5 1

1 33 2

4 32 3

1 4

153
對於全部資料,1≤n

≤3×10

5,1≤

s≤28

,|ti

|≤28

,0≤c

i≤28

'>1≤n≤3×105

,1≤s≤28

,|ti|≤28

,0≤ci≤28。1

≤n≤3

×105,

1≤s≤

28,|

ti|≤

28,0

≤ci≤

28'>sol:這次的ti可以是負的,所以就沒有單調性了,但是凸包還是有單調性的,所有二分當前直線與凸包的切點就可以了(題解原話)

#include using

namespace

std;

typedef

long

long

ll;inline ll read()

while

(isdigit(ch))

return (f)?(-s):(s);

}#define r(x) x=read()inline

void

write(ll x)

if(x<10

)

write(x/10

); putchar((x%10)+'0'

);

return;}

#define w(x) write(x),putchar(' ')

#define wl(x) write(x),putchar('\n')

const

int n=300005

;int

n,s;

ll time[n],cost[n];

ll dp[n];

intque[n];

inline

bool panduan_rev(int j,int k,int i) //

jint

main()

int head=1,tail=1

; que[

1]=dp[0]=0

;

for(i=1;i<=n;i++)

else r=mid-1

; }

dp[i]=dp[que[pos]]+s*(cost[n]-cost[que[pos]])+time[i]*(cost[i]-cost[que[pos]]);

while(head1],que[tail],i)) tail--;

que[++tail]=i;

}wl(dp[n]);

return0;

}/*input51

1 33 2

4 32 3

1 4output

153*/

view code

AcWing 302 任務安排3

題目描述 有 n 個任務排成乙個序列在一台機器上等待執行,它們的順序不得改變。機器會把這 n 個任務分成若干批,每一批包含連續的若干個任務。從時刻0開始,任務被分批加工,執行第 i 個任務所需的時間是 ti。另外,在每批任務開始前,機器需要 s 的啟動時間,故執行一批任務所需的時間是啟動時間 s 加...

AcWing 302 任務安排3

題目傳送門 在 acwing 301 任務安排 2 中,我們給出了任務安排問題的斜率優化的解法,因為斜率 k st i s 是單調遞增的 直線與橫軸的夾角遞增 所以佇列中小於當前 k 的斜率一定小於後面的 k 於是我們在查詢第乙個大於 k 的斜率時將小於 k 的斜率都刪除了,從而保證了 o n 的時...

一本通 1633 例 3 Sumdiv

今天早上考試考了這道題 題意 求 a 所有約數之和 9901的結果。思路 暴力 快速冪 線性判約數再求和,30分。正解 看到求約數之和,很自然想到唯一分解定理,對於正整數n,n a 1a 2 dots a n 而言,它的約數之和為 1 a 1 a 1 2 dots a 1 1 a 2 a 22 do...