1444 「破鑼搖滾」樂隊

2022-05-03 11:27:22 字數 1199 閱讀 6217

時間限制: 1 s

空間限制: 256000 kb

題目等級 : ** silver

題解你剛剛繼承了流行的「破鑼搖滾」樂隊錄製的尚未發表的n(1 <= n <= 20)首歌的版權。你打算從中精選一些歌曲,發行m(1 <= m <= 20)張cd。每一張cd最多可以容納t(1 <= t <= 20)分鐘的**,一首歌不能分裝在兩張cd中。

不巧你是一位古典**迷,不懂如何判定這些歌的藝術價值。於是你決定根據以下標準進行選擇:

1.歌曲必須按照創作的時間順序在cd盤上出現。

2.選中的歌曲數目盡可能地多。

輸入描述 input description

第一行: 三個整數:n, t, m.

第二行: n個整數,分別表示每首歌的長度,按創作時間順序排列。

輸出描述 output description

乙個整數,表示可以裝進m張cd盤的樂曲的最大數目。

樣例輸入 sample input

4 5 2

4 3 4 2

樣例輸出 sample output

資料範圍及提示 data size & hint

分類標籤 tags 點此展開 

暫無標籤

分析:

題目很好,就是資料有點水。

f[i][k][j] 前i首歌用了k張cd,第k張cd的容量為j的最大數量

對於第i首歌,可以把它放到前面的cd中,也可以新開一張cd。

在普通的揹包中,f[j]表示最大價值,所以這裡可以用f[k][j] 表示前k張cd上的最大數量

f[k][j]=max(f[k][j],f[k-1][t]+1);// 新開一張cd
f[k][j]=max(f[k][j],f[k][j-v[i]]+1);//放到原來的cd上
ac**:

#include#include

#include

using

namespace

std;

#define n 22

int n,m,t,v[n],f[n][n];//

f[k][j] k張cd,第k張cd的容量為j的最大數量

intmain()}}

printf("%d

",f[m][t]);

return0;

}

CODEVS 1444 「破鑼搖滾」樂隊

多個相同的揹包,求最大價值 f i k j 前i首歌用了k張cd,第k張cd的容量為j的最大數量 對於第i首歌,可以把它放到前面的cd中,也可以新開一張cd。在普通的揹包中,f j 表示最大價值,所以這裡可以用f k j 表示前k張cd上的最大數量 f k j max f k j f k 1 t 1...