鸡蛋掉落

题目:鸡蛋掉落

问题描述:

你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。

每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。

你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。

每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X <= N)。

你的目标是确切地知道 F 的值是多少。

无论 F 的初始值如何,你确定 F 的值的最小移动次数是多少?

解决思路:

本题常规的解决思路即是:确定第一个鸡蛋扔下的楼层数,然后根据结果判断接下来的扔鸡蛋策略。这种解决思路的难点也就在于如何确定第一个鸡蛋扔下的楼层数。于是我们可以转换思考方向:给你K个鸡蛋并且固定你的移动次数,那么你最多能够确定几层楼的扔鸡蛋情况呢。

在这种思考方向下,我们很轻易地就能确定:

superEggDrop()中循环退出的条件:能够确定的楼层数要大于或等于N;getLayers()递归退出的条件:当前的移动次数或者鸡蛋数为1。

在getLayers()中,无论鸡蛋从该层扔下碎没碎,移动次数都需要减1,原因在于扔鸡蛋是需要耗费移动次数的,换言之即是我们扔了鸡蛋之后就需要移动一次以判断下一次扔鸡蛋的情况;并且在扔鸡蛋的过程中:如果鸡蛋从该层扔下碎了,则鸡蛋数也需要减1,如果没碎,那么能够确定的楼层数就需要加1。

解决代码:


class Solution {
    public int superEggDrop(int K, int N) {
        int moves = 1;
        while(getLayers(moves, K) < N){
            ++moves;
        }
        return moves;
    }

    public int getLayers(int moves, int eggNum){
        if(moves == 1 || eggNum == 1){
            return moves;
        }

        return (getLayers(moves-1, eggNum) + 1) + getLayers(moves-1, eggNum-1);
    }

}

原文地址:https://www.cnblogs.com/syhyfh/p/12687132.html

时间: 2024-11-08 12:51:00

鸡蛋掉落的相关文章

动态规划法(六)鸡蛋掉落问题(二)

??上次我们讲到,我们的主人公丁丁由于用动态规划法解决了鸡蛋掉落问题(egg dropping problem)而获得了当地科学家的赏识.这不,正当丁丁还沉浸在解决问题的喜悦中,科学家又给丁丁出了一个难题: 假设有n个鸡蛋和d次尝试机会,那么,最多能探索多少层楼? 这无疑是鸡蛋问题的翻版,因为这两个问题实在太像了.丁丁没有犹豫,立马按照之前的想法开始思考: ??用\(f(d, n)\)表示该问题的解.假设从k层楼扔下鸡蛋(k足够大),若鸡蛋碎了,则剩下n-1个鸡蛋,d-1次尝试机会,最多能向下探

力扣第887题 鸡蛋掉落

力扣第887题 鸡蛋掉落 class Solution { public: int superEggDrop(int K, int N) { vector<vector<int>> dp(K+1, vector<int>(N+1, 0)); int m = 0; for (; dp[K][m] < N;) { m++; for (int k = 1; k <= K; k++) dp[k][m] = 1 + dp[k-1][m-1] + dp[k][m-1];

LeetCode887鸡蛋掉落——dp

题目 题目链接 你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N  共有 N 层楼的建筑.每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去,如果没有碎可以继续使用.你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破.每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X <= N).你的目标是确切地知道 F 的值是多少.无论 F 的初始值如何,

[LeetCode] 887. 鸡蛋掉落

这道题好变态...... import java.util.Arrays; public class Solution { public int superEggDrop(int K, int N) { // dp[i][j]:一共有 i 层楼梯的情况下,使用 j 个鸡蛋的最少仍的次数 int[][] dp = new int[N + 1][K + 1]; // 初始化 for (int i = 0; i <= N; i++) { Arrays.fill(dp[i], i); } for (in

leet

# 题名1 两数之和    2 两数相加    3 无重复字符的最长子串    4 寻找两个有序数组的中位数    5 最长回文子串    6 Z 字形变换    7 整数反转    8 字符串转换整数 (atoi)    9 回文数    10 正则表达式匹配    11 盛最多水的容器    12 整数转罗马数字    13 罗马数字转整数    14 最长公共前缀    15 三数之和    16 最接近的三数之和    17 电话号码的字母组合    18 四数之和    19 删除链表

小年糕秋招面试复盘

10月18日笔试 一共三道算法题,都在剑指offer上有类似的题,一点小缺陷是约瑟夫问题递推公式当时没有想起来,只能用暴力解的. 1.一道排序 2.约瑟夫问题 3.动态规划上楼梯 10月29日现场面试 先花了半个小时针对简历上的东西进行提问,又用了半个小时做手撕4道算法题.   1.项目相关,django框架 2.机器学习模型有几层,怎么训练的 3.python排序的方法 4.python对dict的key排序 5.python多态 6.python多继承概念 7.sql join关键字 8.m

从“煎鸡蛋”到“孵小鸡”松下空调温暖呵护生命

从“空调煎鸡蛋”到“空调孵小鸡”,松下空调每一次新品发布都让人们惊呼:原来空调还可以这么“玩”! 在9月23日举办的2016年松下健康空调新商品发布会上,松下空调原装整机进口空调怡爵VE系列惊艳亮相,并以其全进口配件以及健康呵护功效吸引包括媒体.经销商等来自全国各地嘉宾的广泛关注.本次引进的是松下历经多年研发的新一代冷媒加热式空调,型号包括VE9KK1.VE22KK1在内的涵盖1匹到2.5匹机型,解决了松下空调以往壁挂机最高2匹的尴尬,也满足用户的多样化需求. 广州松下空调器有限公司总经理山口昌

鸡蛋的硬度

描述 最近XX公司举办了一个奇怪的比赛:鸡蛋硬度之王争霸赛.参赛者是来自世 界各地的母鸡,比赛的内容是看谁下的蛋最硬,更奇怪的是XX公司并不使用什么精密仪器来测量蛋的硬度,他们采用了一种最老土的办法--从高度扔鸡蛋--来 测试鸡蛋的硬度,如果一次母鸡下的蛋从高楼的第a层摔下来没摔破,但是从a+1层摔下来时摔破了,那么就说这只母鸡的鸡蛋的硬度是a.你当然可以找出各种 理由说明这种方法不科学,比如同一只母鸡下的蛋硬度可能不一样等等,但是这不影响XX公司的争霸赛,因为他们只是为了吸引大家的眼球,一个个

大楼扔鸡蛋问题(动态规划)

题目链接:poj 3783 题意分析: 经典题,小白书上的一道例题,4+2出了这道原题,我愣是以为是数学题,最后也没做出来.题意是这样的,给你N个鸡蛋(硬度一样),让你测鸡蛋的硬度,测量的方法就是从某栋M层的楼的某一层X上把鸡蛋扔下来,如果鸡蛋碎了,代表他的强度小于X:如果没碎,则强度大于等于X.我们要做的就是不断的从楼上把鸡蛋扔下来,直到找到某一层楼X,从这一层楼扔下来鸡蛋不碎掉,从X+1层扔下来鸡蛋碎掉,那么鸡蛋的强度就是X.如果在M层扔下来鸡蛋也不碎掉,那么鸡蛋的强度为M.问题是,用N个鸡