美文网首页
数字金字塔

数字金字塔

作者: mysimplebook | 来源:发表于2019-11-05 10:47 被阅读0次

写一个程序查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以从当前点走到左下方的点也可以到达右下方的点。如

        动态规划思想,以farray[i][j]作为i,j位置处最大和,它来源于farray[i-1][j-1]、farray[i-1][j]的最大值。

def maxsum(carray):

    farray=[ [0]*len(var) for var in carray ]

    farray[0][0]=carray[0][0]

    length=len(carray)

    for i in range(1,length):

        for j in range(i+1):

                temp=-float('inf')

                for k in range(j-1,j+1):

                    if k==i:

                        temp=farray[i-1][j-1]      #左上角

                    elif k==0:

                        temp=farray[i-1][k]      #上方

                    else:

                        temp=max(temp,farray[i-1][k])    #上方和左上角最大值

                farray[i][j]=carray[i][j]+temp

    return farray

测试用例

>>> carray=[[7],[3,2],[8,1,0],[2,7,4,4],[4,5,2,6,5]]

>>> maxsum(carray)

[[7], [10, 9], [18, 11, 9], [20, 25, 15, 13], [24, 30, 27, 21, 18]]

>>>

>>> carray=[[13],[11,8],[12,7,26],[6,14,15,8],[12,7,13,24,11]]

>>> maxsum(carray)

[[13], [24, 21], [36, 31, 47], [42, 50, 62, 55], [54, 57, 75, 86, 66]]

>>>

相关文章

网友评论

      本文标题:数字金字塔

      本文链接:https://www.haomeiwen.com/subject/ebrsbctx.html