谁能解决这个排序问题,与众不同的排序

Sunday
博客专家认证
2010-04-18 03:36:04
前面发的类似的帖子估计大家没看懂,这样我改变一下方式说一下:


有N个位置,从左到右,其位置上分别有一块石头(重量各不相等),现在要求把这些石头排好序,从左到右依次递增.但移动石头要花费一定的费用,费用的大小就是移动石头的重量。问怎样移动石头才能使排序的费用最小。

例如:有三个位置,从左到右 石头的重量依次是:3(n1),1(n2),2(n3);(ni表示第i个位置)
第一种排序方式:先让n1上的石头与n3位置上的石头交换交换,然后n1上的石头与n2交换,(即:3,2 交换,然后2,1交换)此时花费3*1+2*2+1*1=8(重量为3的石头移动了1次,重量为2的石头移动了2次,重量为1的石头移动了1次);

第二种排序:先让1,2交换,然后1,3交换.此时的费用1*2+2*1+3*1=7;


我们看到不同的移动石头方式有不同的费用,问:对于给定的N个位置,和每个位置上的石头重量,怎样移动排序能使费用最小,并且求出最小费用。
...全文
199 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lidowx 2010-04-20
  • 打赏
  • 举报
回复
最优解用动态规划解
quxiuer 2010-04-20
  • 打赏
  • 举报
回复
3 1 2

a 重的先到达目的地 3*1 + 2*1 + 2*1 + 1*1 = 8

b 轻的先到达目的地 1*1 + 3*1 + 3*1 + 2*1 = 9

c 比较轻的两个石头先换位置 1*1 + 2*1 + 1*1 + 3*1 = 7

d 比较重的两个石头先换位置 3*1 + 2*1 + 1*1 + 2*1 = 8

这样比较来看的话 c 比较省钱
quxiuer 2010-04-20
  • 打赏
  • 举报
回复
要求是搬动的费用最少
那么最重的就一次到达目的地
从最重的开始搬,依次搬完
花费最少
showjim 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sbwwkmyd 的回复:]
除了已经对位的石头,先找到尽可能多的环。
恢复每个环的最小代价必然是:最大值+次大值+2*sum(其它值),也就是第一次移动(最大值与次大值)中的一块石头,最后一次移动(最大值与次大值)中的另一块石头。
[/Quote]
环应该是固定的,不用找。
showjim 2010-04-20
  • 打赏
  • 举报
回复
除了已经对位的石头,先找到尽可能多的环。
恢复每个环的最小代价必然是:最大值+次大值+2*sum(其它值),也就是第一次移动(最大值与次大值)中的一块石头,最后一次移动(最大值与次大值)中的另一块石头。
qq120848369 2010-04-18
  • 打赏
  • 举报
回复
学习了。

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧