USACO: Raucous Rockers

通过动态规划算法解决如何在限定条件下将一系列摇滚歌曲最优地分配到多个CD中,以最大化歌曲数量的同时保持其创作顺序。

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

Raucous Rockers

You just inherited the rights to N (1 <= N <= 20) previously unreleased songs recorded by the popular group Raucous Rockers. You plan to release a set of M (1 <= M <= 20) compact disks with a selection of these songs. Each disk can hold a maximum of T (1 <= T <= 20) minutes of music, and a song can not overlap from one disk to another.

Since you are a classical music fan and have no way to judge the artistic merits of these songs, you decide on the following criteria for making the selection:

  • The songs on the set of disks must appear in the order of the dates that they were written.
  • The total number of songs included will be maximized.

PROGRAM NAME: rockers

INPUT FORMAT

Line 1: Three integers: N, T, and M.
Line 2: N integers that are the lengths of the songs ordered by the date they were written.

SAMPLE INPUT (file rockers.in)

4 5 2
4 3 4 2

OUTPUT FORMAT

A single line with an integer that is the number of songs that will fit on M disks.

SAMPLE OUTPUT (file rockers.out)

3


 

解题思路:

DP,不过状态检测转移量比较大,我的这个算法大概是θ((n*m)^2),好在题目给的数据量不大

DP的状态转移参见代码注释:其实DP原理还是要自己想得通才行

注意我定义的best[i][j]是:i张碟,第j首歌添加在最后那张碟上,此时可以获得的最多曲目数;如果不能达到这个要求,比如第j首太长根本无法刻入,或者其实第j首可以刻到倒数第二张碟上,best[i][j]都被设置为-1

 

 

顺便贴一下官方的题解

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值