小编rap*_*h c的帖子

饼干怪物问题:将所有数组元素减少到 0 的最小步数

我正在研究饼干怪物问题

饼干怪物有一张桌子,上面有一堆饼干,每堆都是一个正整数。饼干怪物必须以尽可能短的动作顺序吃掉这些饼干。每次移动都由饼干怪物选择一个整数组成,该整数必须是剩余堆大小之一。所选择的移动会从至少包含饼干的每一堆中移除饼干,并将所有较小的一堆保留为移动之前的状态。

此函数应计算并返回允许 Cookie Monster 吃掉这些饼干的最小移动次数。

预期结果 (最佳动作)
[1,2,3,4,5,6] 3 [4,2,1]
[2、3、5、8、13、21、34、55、89] 5 [55,21,8,3,2]
[1、10、17、34、43、46] 5 [34,9,8,3,1]
[11、26、37、44、49、52、68、75、87、102] 6 [37、31、15、12、7、4]
[2**n for n in range (10)] 10 [512、256、128、64、32、16、8、4、2、1]

我得到这个提示:

对于给定的桩,您的函数应该循环遍历其可能的移动,并递归地解决将每个移动应用于桩所产生的新桩的问题。那么,桩的最佳解决方案就是这些子问题解决方案中的最佳解决方案加一。

我的想法是从列表的末尾开始,按降序向下移动。

到目前为止,这是我的代码:

piles=[11, 26, 37, 44, 49, 52, 68, 75,87, 102]
p=piles
n=len(piles)
moves=0
while sum(piles)>0:
    for i in range(len(piles)-1,0,-1):
        if piles[i-1]<piles[i]:
            piles[i]=piles[i]-piles[i-1]
            if piles[i] in p:
                piles.remove(piles[i])
                moves+=1
Run Code Online (Sandbox Code Playgroud)

python arrays algorithm list python-3.x

4
推荐指数
1
解决办法
339
查看次数

标签 统计

algorithm ×1

arrays ×1

list ×1

python ×1

python-3.x ×1