LeetCode算法学习之鸡蛋掉落

完整代码实现

java 复制代码
class Solution {
    public int superEggDrop(int k, int n) {
        int[][] dp = new int[n + 1][k + 1];
        int m = 0;
        while (dp[m][k] < n) {
            m++;
            for (int i = 1; i <= k; i++) {
                dp[m][i] = dp[m - 1][i - 1] + dp[m - 1][i] + 1;
            }
        }
        return m;
    }
}

解题思路:

动态规划定义

定义 dpmk 为用 k 枚鸡蛋和 m 次尝试,最多能检查的楼层数。其递推关系为:

如果在某一层扔鸡蛋:

鸡蛋碎了:剩下 k-1 枚鸡蛋和 m-1 次尝试,能检查 dpm-1k-1 层。

鸡蛋没碎:剩下 k 枚鸡蛋和 m-1 次尝试,能检查 dpm-1k 层。

当前层:无论碎没碎,当前层本身也算一层检查。

因此,状态转移方程为:

dpmk = dpm-1k-1 + dpm-1k + 1

初始化

dpk = 0:0 次尝试无法检查任何楼层。

dpm = m:只有 1 枚鸡蛋时,必须线性检查(最多 m 层)。

算法流程

初始化二维数组 dp:大小为 (n+1) x (k+1),所有元素初始为 0。

逐步增加尝试次数 m:

对于每个 m,计算 dpmi(i 从 1 到 k)。

当 dpmk >= n 时,返回 m。

填充 dp 表:

按行(m)填充,每行更新所有鸡蛋数 i 的值。

相关推荐
知识分享小能手10 分钟前
深度学习学习教程,从入门到精通,概率与信息论 — 知识点详解(3)
人工智能·深度学习·学习·数据挖掘·概率论
Wendy不吃榴莲15 分钟前
# AI短剧教程 - 《后西游记》开播后,AI影视为什么更考验“连续讲故事”?
人工智能·笔记·学习·ai·视频
Agudamu116120 分钟前
B站学习视频怎么变笔记:用 Ai好记 + Obsidian 搭建个人知识库的完整教程
人工智能·笔记·学习·音视频
kkkkkkkkkk_Z1 小时前
学嵌入式和Linux应用编程|学习日记:计算机网络基础
linux·学习·计算机网络
麦田里的粮仓1 小时前
图形设计工具箱(免费开源)
学习
每天题库1 小时前
交安C证报考条件有哪些?公路水运安全员C证报名时间及考试科目
学习·安全·考试·题库·考证
CoderYanger2 小时前
A.每日一题:1140. 石子游戏 II
java·程序人生·算法·leetcode·游戏·职场和发展·深度优先
小雨笙笙2 小时前
机器学习:评估模型与选择
人工智能·算法·机器学习
lifallen2 小时前
长任务怎样选择遗忘:clearing、compaction 与 memory
人工智能·学习·ai·ai编程
高亦真2 小时前
今天是学习嵌入式的第35天
linux·学习·算法