C++贪心算法2
上一期我们讲了贪心算法
详情请见C++贪心算法1
那这一期我们来讲述一下稍微进阶一点的贪心算法
例题:洛谷 P1031.均分纸牌
题目描述:
有 N N N 堆纸牌,编号分别为 1 , 2 , … , N 1,2,…,N 1,2,…,N 。每堆上有若干张,但纸牌总数必为 N N N 的倍数。可以在任一堆上取若干张纸牌,然后移动。
移牌规则为:在编号为 1 1 1 堆上取的纸牌,只能移到编号为 2 2 2 的堆上;在编号为 N N N 的堆上取的纸牌,只能移到编号为 N − 1 N-1 N−1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。
例如 N = 4 N=4 N=4 时, 4 4 4 堆纸牌数分别为 9 , 8 , 17 , 6 9,8,17,6 9,8,17,6 。
移动 3 3 3 次可达到目的:
从第三堆取 4 4