字节算法面试的一道DP题

题目:青蛙跳台阶吃虫子,数组arr代表每个台阶有多少个虫子,要求青蛙每次最多跳k个台阶,最多一共跳n次,计算青蛙最多能吃到多少个虫子?

例:arr=[8 10 9 7 17 13]  k=2 n=3 max=10+7+17=34

def mostinsects(arr,k,n):
    #arr 台阶数组
    #k 每次最多可以跳的台阶数
    #n 最多可以跳的次数
    #转移方程 DP[i][j] 代表在第i个台阶跳了j次后能吃到的最多虫子
    #DP[i][j]=max(DP[i-1][j-1],DP[i-2][j-1],...,DP[i-k][j-1])+arr[i]
    DP=[[0 for _ in range(n)] for _ in range(len(arr))]
    # DP[0][0]=0
    for i in range(k):
        DP[k][0]=arr[k]
    for i in range(len(arr)):
        for j in range(2,i):
            if j>=n:
                break
            else:
                mk=0
                for c in range(1,k+1):
                    mk=max(mk,DP[i-c][j-1])
                DP[i][j]=mk+arr[i]
    return max(DP[:][j-1])
上一篇:解决Kali Linux 2020.1乱码问题


下一篇:Redhat 7安装Oracle 11.2.0.4 RAC 数据库软件中报错:Error in invoking target 'agent nmhs' of makefile