[上一个相关问题:A dance with an aglorithm's complexity]
故事:我即将以特定顺序参加与 n 歌曲的舞蹈比赛。不过,我不能跳到每一首歌,因为我需要时间在每次舞蹈之前做好准备,之后有时间休息。 (幸运的是,一场舞蹈的休息时间可能与下一场舞蹈的准备时间重叠。)
我知道我做跳舞的每首歌我能得到什么分数,我希望最大化我的总分。
所以,我有三个数组:
prep ( i )和 rest ( i )都没有超过上限,称之为< EM>中号
如何最大化我的分数?它的复杂性是什么?
我的尝试:
根据已经给出的答案,采取那个
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
应该下降,正如我的链接问题所述。有人可以帮忙吗?这种重叠使我感到困惑。
答案 0 :(得分:1)
# Get the first song that can be danced to assuming he danced to `i` and wanted to wait till prep time of a song
def myPrep(i):
for j in range(i+1,n):
if j - prep(j) > i:
return j
for i in range(0,n-1):
Opt(i) = max(Opt(i+1),
(Score(i) + Opt(i + 1 + rest(i))),
(Score(i) + Opt(i + 1 + myPrep(i)))
)
在这种情况下,我想到了三种可能性:
Opt(i+1)
Score(i)
和
ith
首歌或myPrep(i)
我自己辩论如果我应该在ith
之后包含所有可能有足够准备时间的歌曲,但我认为Opt(myPrep(i))
应该得到正确的数字,因此我们不需要包括所有计算myPrep(i)
歌曲后ith
之后的歌曲