本帖最后由 newkid 于 2021-2-12 05:31 编辑
这个题目很有意思,最近我花了点时间思考,得出一个结论,希望有人予以验证或反驳。
题目的要求是通过最少的次数达到一种状态,使得无法再取M个球。这就说明剩下的筐里,最多只能M-1筐还有球,其他全部为空。最后剩球的这M-1个筐,就是按初始值排序,最大的M-1个筐(以下称为保留筐)。
把所有筐从大到小排序。假定第M个筐里面球个数为K。
把最大的M-1个保留筐放一边,假设剩下其他筐的球总数为P。
则最小次数=GREATEST(K,CEIL(P/M))
上述例子中,M=3, 排序后{16,12,10,5,3,2,2}
此时第M个筐里面有10个,K=10
保留筐为最大的两个,剩下5个,此时P=10+5+3+2+2=22
最小次数=GREATEST(10,CEIL(22/3))=10
取球规则:
当总筐数 <= M-1+M, 则每次都从当前最小的M个筐取球,也就是楼主的做法。
当总筐数 > M-1+M, 先把最大的M-1个保留筐放一边,剩下的每次从当前最大的M个筐取球,直到取不出。然后再加入保留筐,改成从当前最小的M个筐取球,直到取不出就结束。
以题目为例:{16,12,10,5,3,2,2}先把保留筐{16,12}放一边,然后永远取最大的三个筐:
{16,12,9,4,2,2,2}
{16,12,8,3,1,2,2}
{16,12,7,2,1,1,2}
{16,12,6,1,1,1,1}
{16,12,5,0,0,1,1}
{16,12,4,0,0,0,0} ----- 到这一步再也取不出了,此时把保留筐加入,取最小的三个筐
{15,11,3,0,0,0,0}
{14,10,2,0,0,0,0}
{13,9,1,0,0,0,0}
{12,8,0,0,0,0,0} ----- 至此结束,总共十次
|