時間限制: 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 11 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 usingview codenamespace
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*/
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...