M个正方形瓷砖连续放置在一条直线上。每两个相邻瓷砖之间的距离是1。N个硬币被放置在N个瓷砖上,这些瓷砖可能不是连续的。你被要求将所有的硬币堆移到相同的瓷砖上,其中M>=N,找出需要最小的总移动距离的部分。
写下如何将所有硬币移到一个瓷砖上的伪代码,并计算总的移动次数。
有个想法不知道对不对, 首先找到最两边的硬币, 假设在a瓷砖和b瓷砖 a<b.
不可能往更两边的方向去移动, 只能往[a, b]这个区间内移动, 而在这个区间内不管怎么移动, 这两枚硬币移动的次数之和是一定的, 就是b-a.
也就是说, f(n) = f(n-2)+b-a
这样就有递归了
唯一的问题是解决出口.
首先分奇偶, 如果n是偶, 最后剩下来两枚硬币c, d, 只要移到[c, d]区间内的任意一个瓷砖上就行.
如果n是奇数就更好办了, 最后剩下来一枚硬币都不用移动.