扔鸡蛋

作者: wncbbnk | 来源:发表于2021-12-23 20:26 被阅读0次

扔鸡蛋,有egg个鸡蛋,楼高度为floor层。
问,至少扔几次,才能确定鸡蛋最多在哪一层,不碎

package main

import (
    "fmt"
    "math"
)

func getMinFloorNumber(floor, egg int) int {
    dp := make([][]int, floor+1)
    for i := 0; i < floor+1; i++ {
        dp[i] = make([]int, egg+1)
    }
    for i := 0; i < floor+1; i++ {
        for j := 0; j < egg+1; j++ {
            dp[i][j] = math.MaxInt32
        }
    }
    // i层楼,1个鸡蛋,必须都遍历一遍
    for i := 1; i < floor+1; i++ {
        dp[i][1] = i
    }

    for i := 1; i < egg+1; i++ {
                // 0层楼,不需要扔
        dp[0][i] = 0
                // 1层楼,需要扔一次
        dp[1][i] = 1
    }

    for i := 2; i < floor+1; i++ {
        for j := 2; j < egg+1; j++ {
            for k := 1; k <= i; k++ {
                // 从1层到k层挨个试验
                // 分为两种情况,要么蛋碎了,要么蛋没碎
                // 1.蛋碎了, 说明k层以及大于k层不用测了,
                //   还需要测k-1层, 且只剩j-1个蛋
                // 2.蛋没碎,说明k层以及小于k层不用测了,
                //   还需要测i-k层,且蛋还是j个
                // 无论如何都摔了一次,因此要加一
                // 因为1~k层,蛋碎,都有可能,因此需要取最大值
                tmp := max(dp[k-1][j-1], dp[i-k][j]) + 1
                // 因为可以从1~i层扔,每次只能选一种情况,因此选择最小值
                // 这里取所有方法的最小值
                dp[i][j] = min(tmp, dp[i][j])
            }
        }
    }

    return dp[floor][egg]
}

func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

func main() {
    fmt.Printf("rst:%d\n", getMinFloorNumber(100, 2))
}
``

相关文章

  • 扔鸡蛋

    二分查找排除楼层的速度无疑是最快的,那干脆先用二分查找,等到只剩 1 个鸡蛋的时候再执行线性扫描,这样得到的结果是...

  • 扔鸡蛋

    扔鸡蛋,有egg个鸡蛋,楼高度为floor层。问,至少扔几次,才能确定鸡蛋最多在哪一层,不碎

  • 有趣的扔鸡蛋问题

    题目:扔鸡蛋问题 有2个鸡蛋,从100层楼上往下扔,以此来测试鸡蛋的硬度。比如鸡蛋在第9层没有摔碎,在第10层摔碎...

  • 谷歌“扔鸡蛋问题”

    问题: 假设有2个鸡蛋和100层楼,将鸡蛋从第n层扔下,鸡蛋没有碎,将鸡蛋从n+1层扔下,鸡蛋碎了,那么n层就...

  • 动态规划-扔鸡蛋

    动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程[https://bai...

  • 【LintCode】254. 丢鸡蛋

    楼有 n 层高,鸡蛋若从 k 层或以上扔,就会碎。从 k 层以下扔,就不会碎。现在给两个鸡蛋,用最少的扔的次数找到...

  • 漫画:有趣的扔鸡蛋问题

    本文转载自程序员小灰 ————— 第二天 ————— 题目:扔鸡蛋问题 有2个鸡蛋,从100层楼上往下扔,以此...

  • 画外音

    (画面) 一位老人正在忙于做菜。“叭”,磕开一鸡蛋,倒碗里,蛋壳扔拉圾袋里,“叭”再磕开一鸡蛋,倒碗里,蛋壳扔...

  • 高楼扔鸡蛋解题思路

    1. 带「备忘录」的递归算法 把一棵存在巨量冗余的递归树通过「剪枝」,改造成了一幅不存在冗余的递归图,极大减少了子...

  • 徐伊万扔番茄我儿子扔鸡蛋

    回湖北过年的这几天在家看《囧妈》。 做为一位两个娃的老妈,在看到 徐伊万一个一个地往窗外扔小番茄的场景时想起儿子在...

网友评论

      本文标题:扔鸡蛋

      本文链接:https://www.haomeiwen.com/subject/vdlkqrtx.html