時間限制: 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...