LUOGU P2365 任務安排

2022-05-12 11:09:22 字數 1921 閱讀 1872

題目描述

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。

輸出格式:

乙個數,最小的總費用。

輸入輸出樣例

輸入樣例#1:

1 1 3

3 2

4 3

2 3

1 4

輸出樣例#1:

153讀完題很容易想到乙個n^3的做法,dp[i][k]表示第i個元素被分到k組的最小值,然後第一層列舉i,第二層列舉i前面的乙個元素j,表示要將i到j分成一組,第三層列舉k,表示分到哪一組。轉移十分容易,預處理出時間與花費的字首和進行轉移,時間複雜度o(n^3),顯然會炸,但強行卡常能卡到80分。先上個**。

#include

#include

#include

#include

#define ll long long

using

namespace

std;

const

int maxn = 5005;

int n,s,sum[maxn],t[maxn],f[maxn],f[maxn],ans=0x3f3f3f3f;

int dp[maxn][maxn];

int mid(int x,int y)

signed main()}}

for(register

int i=1;i<=n;i++) ans=min(ans,dp[n][i]);

printf("%d",ans);

return

0;}

我們考慮優化,考慮每次分一組對後面的影響,每次如果增加一組,那麼後面所有的時間都要加s,那麼轉移的時候就把後面的影響加上就行了,這樣後面就不用加了,不會對此處的最優答案造成影響,所以我們不需要列舉k,陣列一維就夠了。時間複雜度o(n^2),這是乙個非常巧妙的地方,把後面的影響提前加上。

#include

#include

#include

#include

#define ll long long

using

namespace

std;

const

int maxn = 5005;

int n,s,sum[maxn],t[maxn],f[maxn],f[maxn],ans=0x3f3f3f3f;

int dp[maxn];

int mid(int x,int y)

signed main()

for(register

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

for(register

int j=1;j<=i;j++)

dp[i]=min(dp[i],dp[j-1]+sum[i]*(f[i]-f[j-1])+s*(f[n]-f[j-1]));

for(register

int i=1;i<=n;i++) ans=min(ans,dp[n]);

printf("%d",ans);

return

0;}

P2365 任務安排

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

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 的考慮怎麼優化 對於每次...

P2365 任務安排 batch 動態規劃

batch 輸入檔案 batch.in 輸出檔案 batch.out 簡單對比 時間限制 1 s 記憶體限制 128 mb 題目描述 n個任務排成乙個序列在一台機器上等待完成 順序不得改變 這 n個任務被分成若干批,每批包含相鄰的若干任務。從時刻 0開始,這些任務被分批加工,第 i個任務單獨完成所需...