3月14日第二題!!
題目描述
n個任務排成乙個序列在一台機器上等待完成(順序不得改變),這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti。在每批任務開始前,機器需要啟動時間s,而完成這批任務所需的時間是各個任務需要時間的總和(同一批任務將在同一時刻完成)。每個任務的費用是它的完成時刻乘以乙個費用係數fi。請確定乙個分組方案,使得總費用最小。
例如:s=1;t=;f=。如果分組方案是、、,則完成時間分別為,費用c=,總費用就是153。
輸入輸出格式
輸入格式:
第一行是n(1<=n<=5000)。
第二行是s(0<=s<=50)。
下面n行每行有一對數,分別為ti和fi,均為不大於100的正整數,表示第i個任務單獨完成所需的時間是ti及其費用係數fi。
輸出格式:
乙個數,最小的總費用。
輸入輸出樣例
輸入樣例:
5 1
1 3
3 2
4 3
2 3
1 4
輸出樣例:
153一上來先把n^3寫出來
f[i][j] 表示前i個分j批的最小花費
code:
//by menteur_hxy
#include
#include
#include
#include
using
namespace
std;
const
int max=5010;
const
int inf=0x3f3f3f3f;
int n,s,minn=inf;
int ti[max],fi[max],f[max][max];
int main()
memset(f,0x3f,sizeof f);
f[0][0]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
}for(int i=1;i<=n;i++) minn=min(minn,f[n][i]);
printf("%d",minn);
return
0;}
n=5000,嗯好像過不了。
考慮公升級成n^2 發現可以把批數忽略掉
只需要提前加上後面多出的花費即可。
code:
//by menteur_hxy
#include
#include
#include
#include
using
namespace
std;
const
int max=5010;
const
int inf=0x3f3f3f3f;
int n,s;
int ti[max],fi[max],f[max];
int main()
memset(f,0x3f,sizeof f);
f[0]=0;
for(int i=1;i<=n;i++)
for(int j=0;jprintf("%d",f[n]);
return
0;}
搞定收工233~。 洛谷 P2365 任務安排 (線性dp)
3月14日第二題!題目描述 n個任務排成乙個序列在一台機器上等待完成 順序不得改變 這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti。在每批任務開始前,機器需要啟動時間s,而完成這批任務所需的時間是各個任務需要時間的總和 同一批任務...
洛谷 P2365 任務安排 (線性dp)
3月14日第二題!題目描述 n個任務排成乙個序列在一台機器上等待完成 順序不得改變 這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工,第i個任務單獨完成所需的時間是ti。在每批任務開始前,機器需要啟動時間s,而完成這批任務所需的時間是各個任務需要時間的總和 同一批任務...
P2365 任務安排
n個任務排成乙個序列在一台機器上等待完成 順序不得改變 這 n個任務被分成若干批,每批包含相鄰的若干任務。從零時刻開始,這些任務被分批加工,第 i個任務單獨完成所需的時間為 ti 在每批任務開始前,機器需要啟動時間 s,而完成這批任務所需的時間是各個任務需要時間的總和 同一批任務將在同一時刻完成 每...