摘要: 题意:每次交换数组相邻的两个位置的值,耗费是两个值的和。求使数组排序的最小花费; 解法:树状数组; 我的做法是从后往前遍历数组,对a[i],求出比a[i]小下标却比i大的元素个数x,然后求出这x个值的和temp,sum(a[i]*x+temp)(1<=i<=n)即为所求。至于为什么要这样做,原因很简单,大家都知道最少的交换次数是求逆序数。但是总花费最小是不是也是这样求?答案是:是。 这是可以证明的,因为每次只能交换相邻的两个数,所以只要存在a[i]>a[j](i<j)则a[i],a[j]则至少会交换一次。所以当他们只交换一次的时候总花费是最小的。 还有一个需要注意的地方 阅读全文
posted @ 2011-09-25 10:34 like@neu 阅读(235) 评论(0) 推荐(0) 编辑