有 n
nn 個任務排成乙個序列在一台機器上等待執行,它們的順序不得改變。
機器會把這n
nn 個任務分成若干批,每一批包含連續的若干個任務。
從時刻0
00開始,任務被分批加工,執行第 i
ii 個任務所需的時間是 t
it_i
ti。
另外,在每批任務開始前,機器需要 s 的啟動時間,故執行一批任務所需的時間是啟動時間 s
ss 加上每個任務所需時間之和。
乙個任務執行後,將在機器中稍作等待,直至該批任務全部執行完畢。
也就是說,同一批任務將在同一時刻完成。
每個任務的費用是它的完成時刻乘以乙個費用係數 c
ic_i
ci。
請為機器規劃乙個分組方案,使得總費用最小。
輸入格式
第一行包含整數 nnn。
第二行包含整數 sss。
接下來n行每行有一對整數,分別為 t
it_i
ti 和 c
ic_i
ci,表示第 i
ii 個任務單獨完成所需的時間 t
it_i
ti 及其費用係數 c
ic_i
ci。
輸出格式
輸出乙個整數,表示最小總費用。
資料範圍1≤n
≤5000
1≤n≤5000
1≤n≤50
00,0≤s
≤500≤s≤50
0≤s≤50,1≤
ti,c
i≤1001≤t_i,c_i≤100
1≤ti,
ci≤
100
輸入樣例
5輸出樣例 根據題目描述,可以將任務劃分成若干批,每一批包含連續的若干個任務,且在每批任務開始前,機器需要 s11 3
3 24 3
2 31 4
ss 的啟動時間。分析輸入樣例,可以將任務做如下劃分:
此時總費用=(3
+2+3
)×9+
(3+4
)×13=
72+91=
163=(3 + 2 + 3) \times 9 + (3 + 4) \times 13=72+91=163
=(3+2+
3)×9
+(3+
4)×1
3=72
+91=
163
也可以將任務做如下劃分:
此時總費用=(3
+2)×
5+(4
+2)×
12+4×
14=25+
72+56=
153=(3 + 2) \times 5 + (4 + 2) \times 12 + 4\times14=25+72+56=153
=(3+2)
×5+(
4+2)
×12+
4×14
=25+
72+5
6=15
3,此時總費用最小。
從上述分析可以看出,這是乙個典型線性dp求最小值問題。
f[i]
表示處理完前i
個任務,所有方案的最小值
不妨設j
為前一批的最後乙個任務,那麼要計算f[i]
可以分為下面幾部分:
每一批任務的開始都會增加乙個啟動時間s
ss,這會導致後面所有任務的完成時刻都增加s
ss,所以還需要在當前階段累加對後面所有任務帶來的額外影響,即s×(
sumc
n−su
mcj)
s\times (sum_-sum_)
s×(sum
cn
−sum
cj
)因此,狀態轉移方程可以表示為:
f [i
]=mi
n,0≤
j<
if[i]= min\\times(sum_-sum_)+s\times (sum_-sum_)\}, 0\le j \lt i
f[i]=m
in,0
≤j<
i狀態數:n
nn狀態計算時間複雜度:o(n
)o(n)
o(n)
總的時間複雜度為:o(n
2)=o
(25,000
,000
)o(n^2) = o(25,000,000)
o(n2)=
o(25
,000
,000
)
#include
#include
using
namespace std;
typedef
long
long ll;
const
int n =
5010
;ll sumt[n]
, sumc[n]
;ll f[n]
;int
main()
//求最小值,要將陣列初始化為無窮大
memset
(f,0x3f
,sizeof f)
; f[0]
=0;//初始狀態
for(
int i =
1; i <= n; i ++
)for
(int j =
0; j < i; j ++
) f[i]
=min
(f[i]
, f[j]
+ sumt[i]
*(sumc[i]
- sumc[j]
)+ s *
(sumc[n]
- sumc[j]))
; cout << f[n]
<< endl;
return0;
}
任務安排1
有 n 個任務排成乙個序列在一台機器上等待執行,它們的順序不得改變。機器會把這 n 個任務分成若干批,每一批包含連續的若干個任務。從時刻0開始,任務被分批加工,執行第 i 個任務所需的時間是 titi。另外,在每批任務開始前,機器需要 s 的啟動時間,故執行一批任務所需的時間是啟動時間 s 加上每個...
1606 例 1 任務安排 1
1606 例 1 任務安排 1 時間限制 1000 ms 記憶體限制 524288 kb 提交數 203 通過數 149 題目描述 有 n 個任務排成乙個序列在一台機器上等待執行,它們的順序不得改變。機器會把這 n 個任務分成若干批,每一批包含連續的若干個任務。從時刻 0 開始,任務被分批加工,執行...
P2365 任務安排 題解
p2365 任務安排 這道題有弱化版和強化版,這道題是弱化版 我們很容易能想到乙個 dp 方程 f p i 表示前 i 個取了 p 段的最優解,於是轉移方程 f p i min f p 1 j st i p ast s ast sf i sf j 這個轉移方程是 o n 3 的考慮怎麼優化 對於每次...