1 {
2 ID:wwzhwdw1
3 PROG:rockers
4 LANG:PASCAL
5 }
6
7 program rockers;
8 var
9 m,n,t,k,j,i:longint;
10 f:array[0..21,0..21,0..21]of longint;
11 a:array[0..21]of longint;
12
13 procedure init;
14 begin
15 assign(input,'rockers.in');
16 reset(input);
17 assign(output,'rockers.out');
18 rewrite(output);
19 end;
20
21 procedure outit;
22 begin
23 close(input);
24 close(output);
25 end;
26
27 function max(a,b:longint):longint;
28 begin
29 if a>b then exit(a);
30 exit(b);
31 end;
32
33 procedure main;
34 begin
35 fillchar(f,sizeof(f),0);
36 readln(n,t,m);
37 for i:=1 to n do read(a[i]);
38 for i:=1 to n do
39 for j:=1 to m do
40 for k:=0 to t do
41 begin
42 if k<a[i] then f[i,j,k]:=max(f[i-1,j,k],f[i-1,j-1,t])
43 else f[i,j,k]:=max(f[i-1,j,k-a[i]],f[i-1,j-1,t])+1;
44 end;
45 writeln(f[n,m,t]);
46 end;
47
48 begin
49 init;
50 main;
51 outit;
52 end.
53
【题目描述】
你刚刚继承了流行的“破锣摇滚”乐队录制的尚未发表的N(1 <= N <= 20)首歌的版权。你打算从中精选一些歌曲,发行M(1 <= M <= 20)张CD。每一张CD最多可以容纳T(1 <= T <= 20)分钟的音乐,一首歌不能分装在两张CD中。
不巧你是一位古典音乐迷,不懂如何判定这些歌的艺术价值。于是你决定根据以下标准进行选择:
1.歌曲必须按照创作的时间顺序在CD盘上出现。
2.选中的歌曲数目尽可能地多。
3.不仅同光盘上的歌曲写入时间要按顺序,前一张光盘上的歌曲不能比后一张歌曲写入时间要晚。
【解题报告】
类似于背包的DP,F[I,J,K]表示第I首歌时,正在使用第J张光盘,且此张光盘上已用了K分钟。