使用 Python 查找我们可以获得的最大硬币数量的程序

假设有 3*n 堆硬币,它们大小不一,三个玩家正在玩这样的游戏 -

  • 在每一步中,玩家 1 将选择任意 3 堆硬币。

  • 玩家 2 将选择硬币数量最多的那堆。

  • 玩家 1 将选择具有最大数量硬币的下一堆。

  • Player3 将选择最后一堆。

  • 重复这些步骤,直到没有更多的硬币堆。

现在,如果我们有一个称为堆的整数数组,其中堆 [i] 是第 i 堆中的硬币数量,那么我们必须找到玩家 1 可以拥有的最大硬币数量。

所以,如果输入像堆 = [2,4,1,2,7,8],那么输出将是 9,因为首先我们可以选择一个三元组 (2,7,8),然后 Player2 选择 8,玩家 1 选择 7,玩家 3 选择 2。然后再次选择三元组 (1,2,4),然后玩家 2 选择硬币 4 堆,然后玩家 1 选择 2,剩下的 1 给玩家 3。目前玩家 1 有 7+2 = 9 个硬币,这是最大值。

为了解决这个问题,我们将按照以下步骤操作 -

  • 对列表堆进行排序

  • 答案:= 0

  • 而桩的大小不等于0,做

    • ans := ans + 堆中的倒数第二个元素

    • 从堆中删除倒数第二个元素

    • 从堆中删除最后一个元素

    • 从堆中删除第一个元素

  • 返回答案

让我们看看以下实现以获得更好的理解 -

示例

def solve(piles):
   piles.sort()
   ans = 0
   while(len(piles)!=0):
      ans = ans + piles[-2]
      del piles[-2]
      del piles[-1]
      del piles[0]
   return ans
piles = [2,4,1,2,7,8]
print(solve(piles))

输入

[2,4,1,2,7,8]
输出结果
9