题解 | #丢棋子问题#

丢棋子问题

http://www.nowcoder.com/practice/d1418aaa147a4cb394c3c3efc4302266

class Solution:
    def solve(self , n: int, k: int): # k个棋子进行了t次实验,可以验证的楼高
        if n < 1 or  k < 1: return 0
        if k == 1: return n # 只能从第一层逐层尝试
           
        # 二分,最差的情况
        import math
        b = math.log2(n) + 1
        if k >= b:
            return int(b) # 如果k充分大, 二分的扔即可
        
        # 初始化,j=1,扔一次只能验证一层
        dp = [1] * (k+1) # dp[i]:i个棋子可以验证的楼层数
        
        res = 1 # 最少也要扔1次
        while True:
            res += 1
            # dp[i]依赖左边和左上, 为了防止覆盖, 需要倒着计算
            for i in range(k, 1, -1):
                dp[i]=dp[i]+dp[i-1]+1
                if dp[i] >= n:
                    return res
            dp[1] = res
全部评论

相关推荐

牛客722552937号:新锐之星有点坑爹,特别是对男的
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务