[USACO] Raucous Rockers

本文介绍了一种动态规划(DP)算法,用于解决如何从多个破锣摇滚乐队的未发行歌曲中选择歌曲,以创建尽可能多的CD,同时遵循特定的规则。算法考虑了歌曲的数量、CD的数量和每张CD的最大容量,确保歌曲按照时间顺序排列,且前一张CD的歌曲时间不晚于下一张CD的歌曲时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 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分钟。

 

转载于:https://www.cnblogs.com/wwzhwdwd/archive/2011/08/27/2155574.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值