字节算法面试的一道DP题

Posted ldadaqiong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节算法面试的一道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])

以上是关于字节算法面试的一道DP题的主要内容,如果未能解决你的问题,请参考以下文章

奉劝还在找工作的学弟学妹们:这一道字节跳动的算法面试题一定要会!

一道关于二叉树的字节面试题的思考

字节跳动的一道动态规划面试题

程序员算法基础——动态规划

可恶啊,四面字节跳动,我的offer竟被一道“算法题”给KO了

面试没过,被算法题问懵了!