标题:一个算法的问题,目测是DFS?
只看楼主
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
回复 48楼 dongshimou
DP、背包,都沾点边。我还是具体解释一下吧。

先考虑唱N首歌所需的最少时间是多少。唱每首歌所需的时间是固定的,差别在于两首歌之间调整音调所需的时间。

由于调整音调所需的时间是两首歌音调差的绝对值,为了直观我们将每首歌的音调按值排列在一根数轴上,两首歌之间调整音调所需时间就可以表示成数轴上两点间的线段长。

那么总的最短调整时间就该是最低音调与最高音调的差值(数轴上最左与最右点间的线段长)。原因,总的调整时间是连接所有点形成的路径的长度,在这些路径中,直线段最短(其它存在折返的线段总比这条直通的线段长吧)。

在此基础上,如果要删除一首歌后剩余的N-1首歌所需时间最短是多少?

删除数轴上中间的点只能减少单唱这首歌所需的时间,而调整音调所需的总时间不会减少。

删除数轴上的端点除了减少唱这首歌所需的时间还能减少一段它与相邻的最近点的距离(调整时间)。(当端点处重合多个点时可以认为它们都是端点,而它们与相邻最近点的距离为0)。

所以考察删除每个点所能减少的时间,选择所能减少时间最大的点删除,就是剩余N-1首歌演唱所需的最短时间。

首先计算唱所有歌曲所需的最短时间,如果超出时间限制则按上述方案删除一首歌,重复这一过程直至满足时间限制。这就是我的算法决策方案。由于时间关系就不写证明过程了,有兴趣的可以自己证明一下。

重剑无锋,大巧不工
2014-01-21 12:03
C_printf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:122
注 册:2010-1-26
得分:0 
哈哈,我打字也能看出我的感情色彩?你们真神人也。
版主你不能低调点?
2014-01-21 12:51
C_printf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:122
注 册:2010-1-26
得分:0 
虚拟网络,大家不要太认真哈。
2014-01-21 12:56
a1004573547
Rank: 2
等 级:论坛游民
帖 子:78
专家分:25
注 册:2013-3-11
得分:0 
又是华农的小朋友
2014-01-23 08:14
wujiayou9102
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-1-23
得分:0 
学习学习
2014-01-23 23:11
a1004573547
Rank: 2
等 级:论坛游民
帖 子:78
专家分:25
注 册:2013-3-11
得分:0 
谁说深度不行。。。 数据那么小
2014-01-24 12:35
C1585077252
Rank: 1
等 级:新手上路
帖 子:3
专家分:4
注 册:2014-1-18
得分:0 
2014-01-24 19:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-426201-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045917 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved