【发布时间】:2017-04-04 04:33:15
【问题描述】:
[以前的相关问题:A dance with an aglorithm's complexity]
故事:我即将参加一个舞蹈比赛,有 n 首歌曲按特定顺序播放。不过,我不能每首歌曲都跳舞,因为我需要时间在每支舞前准备,然后有时间休息。 (幸运的是,一个舞蹈的休息时间可以与下一个舞蹈的准备时间重叠。)
我知道自己跳跳的每首歌可以得到什么分数,我想最大化我的总分。
所以,我有三个数组:
- score(i) 是我随着歌曲 #i 跳舞可以获得的分数。
- prep(i) 是我必须在歌曲 #i 之前跳过的歌曲数,否则我无法播放歌曲 #我。 (例如,如果 prep(4) = 2,那么除非我同时跳过了歌曲 #2 和歌曲 #3,否则我无法随着歌曲 #4 跳舞。)
- rest(i) 是我必须在歌曲 #i 之后立即跳过的歌曲数,如果我做了歌曲 #i。 (例如,如果 rest(4) = 2,并且我随着歌曲 #4 跳舞,那么我必须跳过歌曲 #5 和歌曲 #6。)
prep(i) 和 rest(i) 都不会超过上限,称之为 M.
我怎样才能最大化我的分数?它的复杂性是多少?
我的尝试:
根据已经给出的答案,接受那个
Opt(i) = max(Opt(i+1),
Score(i) + Opt(i + 1 + rest(i))) for i = 0..n-1.
并以此为基础,这样我们就有了像这样的死时间:
Opt(i + 1 + max(prep(i), rest(i)))
但我很担心,因为i 应该下降,正如我在链接问题中提到的那样。有人可以帮忙吗?这种重叠让我感到困惑。
【问题讨论】:
标签: algorithm recursion max time-complexity dynamic-programming