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 的值。

相关推荐
peijiping1 小时前
Agent 工具执行:并行(parallel_tool_calls)和后台(run_in_background)到底有什么区别? (学习笔记)
笔记·学习·ai agent·claude code
何事误红尘1 小时前
KF32A学习笔记(二):IDE基本使用、srec和hex格式、FreeRTOS移植
学习
LuminousCPP1 小时前
单链表专题(四)-刷题复盘篇-LeetCode 138 随机链表复制|原地拷贝法突破复杂指针操作
数据结构·笔记·算法·leetcode·链表
逆境不可逃2 小时前
【LeetCode 912】排序数组——随机化快速排序详解
数据结构·算法·排序算法
Coder-magician2 小时前
《代码随想录》刷题打卡day31:动态规划-背包问题part02
算法·动态规划
薛定e的猫咪2 小时前
从因果视角解决多智能体协作:细读 SCIC 算法
算法
IT古董2 小时前
【MES学习笔记系列】MES 推荐书籍与资源
笔记·学习
Forever Nore2 小时前
LeetCode 14 最长公共前缀 - 纵向扫描
linux·服务器·leetcode
迪丽热爱2 小时前
每日英语-11
学习
c238562 小时前
《算法武林谱:四大排序神功与二分寻宝术全解》
数据结构·算法·排序算法