Function 最坏的情况下鸡蛋会掉下来

Function 最坏的情况下鸡蛋会掉下来,function,dynamic-programming,Function,Dynamic Programming,我一直在尝试写一个算法来计算在最坏的情况下,鸡蛋掉落问题所需的最大数量或试验。这是我的python代码 def eggDrop(n,k): eggFloor=[ [0 for i in range(k+1) ] ]* (n+1) for i in range(1, n+1): eggFloor[i][1] = 1 eggFloor[i][0] = 0 for j in range(1, k+1): eggFloor[1][j] = j for i in r

我一直在尝试写一个算法来计算在最坏的情况下,鸡蛋掉落问题所需的最大数量或试验。这是我的python代码

def eggDrop(n,k):
   eggFloor=[ [0 for i in range(k+1) ] ]* (n+1)
 for i in range(1, n+1):  
    eggFloor[i][1] = 1
    eggFloor[i][0] = 0
 for j in range(1, k+1):
    eggFloor[1][j] = j
 for i in range (2, n+1):
    for j in range (2, k+1):
        eggFloor[i][j] = 'infinity'
        for x in range (1, j + 1):
            res = 1 + max(eggFloor[i-1][x-1], eggFloor[i][j-x])
            if res < eggFloor[i][j]:
                eggFloor[i][j] = res

 return eggFloor[n][k]print eggDrop(2, 100)
def eggDrop(n,k):
蛋池=[[0代表范围内的i(k+1)]]*(n+1)
对于范围(1,n+1)内的i:
蛋池[i][1]=1
蛋池[i][0]=0
对于范围(1,k+1)内的j:
蛋池[1][j]=j
对于范围(2,n+1)内的i:
对于范围(2,k+1)内的j:
蛋地板[i][j]=“无限”
对于范围(1,j+1)内的x:
res=1+最大值(蛋地板[i-1][x-1],蛋地板[i][j-x])
如果res
```


代码输出了2个GGS和100个楼层的值7,但答案应该是14,我不知道我在代码中犯了什么错误。问题出在哪里?

问题出在这一行:

eggFloor=[ [0 for i in range(k+1) ] ]* (n+1)
您希望创建一个包含(k+1)个零的(n+1)列表。
*(n+1)
的作用稍有不同-它创建了一个包含相同列表的(n+1)个副本的列表

这是一个重要的区别,因为当您开始修改列表中的条目时

    eggFloor[i][1] = 1
这实际上改变了所有列表的元素
[1]
,而不仅仅是
i
第1个

要创建可以独立修改的单独列表,您需要如下内容:

eggFloor=[ [0 for i in range(k+1) ] for j in range(n+1) ]
通过此修改,程序将按预期返回14


(为了调试这个程序,最好编写一个函数来弹出eggFloor数组,并在程序中的各个点显示它,这样您就可以将它与您期望的结果进行比较。很快就会非常清楚发生了什么!)

什么是“掉蛋问题”?可能与See重复,以获得更好的性能exposition@overflow:谢谢!如果你发现它有帮助,你可能会考虑投票和/或接受答案: