华为机试 导师请吃火锅

题目:

和朋友一起吃火锅,有m个菜品,你的手速是n(即吃完一道菜,要经过时间n才能再去夹菜)。任一菜品下锅后,都需要经过对应时间才能熟,过时就不可口了。怎样可以吃到最多的可口的菜。

 

输入:

第1行:菜品数量m,手速n

第2-m行:每行两个数字,第一个数字代表下某菜的时间,第二个数字代表该菜下锅后到煮好需要的时间。

 

输出:

最多可以吃多少道菜

 

破题思路:

假设在时间点 A最后一次夹菜,从时间轴向前看,是否有时间点B也可以下筷子,如有,则代表在时间点A能吃到的菜数量比时间点B多1

from typing import List


def solution(arr:List,N):
    arr.sort()
    time1 = arr[-1]
    all = [0]*(time1+1)
    for i in range(1,time1+1):
        if arr.__contains__(i):
            all[i] = 1
        for j in range((i-N),0,-1):
            if arr.__contains__(j):
                all[i] = max(all[i],all[j]+1)
                break
    print(arr)
    print(all)
    print(max(all))#result

solution([3,3],1)

 

posted @ 2022-07-27 11:27  莫大师兄  阅读(431)  评论(0)    收藏  举报