LSGDOJ 1333 任務安排 dp

2022-05-11 12:17:26 字數 1135 閱讀 8145

題目描述

n個任務排成乙個序列在一台機器上等待完成(順序不得改變),這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti。在每批任務開始前,機器需要啟動時間s,而完成這批任務所需的時間是各個任務需要時間的總和(同一批任務將在同一時刻完成)。每個任務的費用是它的完成時刻乘以乙個費用係數fi。請確定乙個分組方案,使得總費用最小。 

例如:s=1;t=;f=。如果分組方案是、、,則完成時間分別為,費用c=,總費用就是153。

第一行是n(1<=n<=2000); 

第二行是s(0<=s<=50)。 

下面n行每行有一對數,分別為ti和fi,均為不大於100的正整數,表示第i個任務單獨完成所需的時間是ti及其費用係數fi。

乙個數,最小的總費用。51

1 33 2

4 32 3

1 4153

題解:

簡單dp,給予我一點啟發,此題看似具有後效性,但要意識到如果一啟動機器,那麼對後面所有的任務都會產生s的貢獻,所以可以把s的貢獻一開始就算進去

所以轉移方程寫成:f[i]=min(f[i],f[j]+st[i]*(sf[i]-sf[j])+s*(sf[n]-sf[j]))

1 #include2 #include3 #include4 #include5

using

namespace

std;

6const

int n=2005;7

intgi()

10while(ch>='

0' && ch<='

9')str=str*10+ch-'

0',ch=getchar();

11return str*f;12}

13int

st[n],sf[n],f[n];

14int

main()

1524

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

2530

}31 printf("%d"

,f[n]);

32return0;

33 }

NKOI 1047 任務安排

任務安排 time limit 1000ms memory limit 65536k total submit 143 accepted 70 description n個任務排成乙個序列在一台機器上等待完成 順序不得改變 這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批...

Tyvj1098 任務安排

恕我懶 分析 本蒟蒻只想到了辣雞做法 f i,j 表示前j個任務分了i組,最少費用,f i,j min 發現這是o n 3 的,水不過去.於是腦洞大開想寫乙個二維的斜率優化.不知道為什麼一直wa了乙個點.於是去尋找正解,發現只需要開1維陣列就夠了,驚呆我了.用f i 表示從第i個任務開始做的最小費用...

TYVJ 1098 任務安排

n個任務排成乙個序列在一台機器上等待完成 順序不得改變 這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti。在每批任務開始前,機器需要啟動時間s,而完成這批任務所需的時間是各個任務需要時間的總和 同一批任務將在同一時刻完成 每個任務的...