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
顺便贴一下官方的题解