GUMIAndSongsDiv1

作者:洪华敦

关键词:贪心,动态规划

题目简述

有一个歌手,他有 n 首歌可以唱,第 i 首歌有一个所需时间 duration[i] 和声调 tone[i]。

如果歌手在唱声调为 y 的歌之前的最后一首歌声调为 x,那么他需要额外 |x-y| 的时间调整声调。

求在 T 的时间内最多唱几首歌。

数据范围

1<=n<=50

1<=duration[i],tone[i]<=100000

1<=T<=10000000

题解

算法一

f[S][i] 表示已经唱的歌是集合 S,最后唱的歌是 i,所需要的最少的时间。

转移时,考虑枚举下一首歌,计算好代价进行转移

时间复杂度:

算法二

考虑贪心,对于一个集合 S,最优的歌唱顺序肯定是 tone[i] 从小到大或者从大到小。

于是重新设计一个 dp 方程:f[i][j] 表示最后一首歌是 i ,唱了 j 首所需要的最少时间。

f[i][j]+|tone[i]-tone[k]|+duration[k] -> f[k][j+1]

时间复杂度

results matching ""

    No results matching ""