LeetCode 887. 鸡蛋掉落(DP,难、不懂)
1. 題目
你將獲得 K 個雞蛋,并可以使用一棟從 1 到 N 共有 N 層樓的建筑。
每個蛋的功能都是一樣的,如果一個蛋碎了,你就不能再把它掉下去。
你知道存在樓層 F ,滿足 0 <= F <= N 任何從高于 F 的樓層落下的雞蛋都會碎,從 F 樓層或比它低的樓層落下的雞蛋都不會破。
每次移動,你可以取一個雞蛋(如果你有完整的雞蛋)并把它從任一樓層 X 扔下(滿足 1 <= X <= N)。
你的目標是確切地知道 F 的值是多少。
無論 F 的初始值如何,你確定 F 的值的最小移動次數是多少?
示例 1: 輸入:K = 1, N = 2 輸出:2 解釋: 雞蛋從 1 樓掉落。如果它碎了,我們肯定知道 F = 0 。 否則,雞蛋從 2 樓掉落。如果它碎了,我們肯定知道 F = 1 。 如果它沒碎,那么我們肯定知道 F = 2 。 因此,在最壞的情況下我們需要移動 2 次以確定 F 是多少。示例 2: 輸入:K = 2, N = 6 輸出:3示例 3: 輸入:K = 3, N = 14 輸出:4提示:1 <= K <= 100 1 <= N <= 10000來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/super-egg-drop
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 好難,看的別人的
李永樂視頻講解
復工復產找工作?先來看看這道面試題:雙蛋問題
很難的的題目,看的別人的思路:求K個雞蛋在moves步內可以測出多少層
- 設 f(k,m)表示K個雞蛋在m步內可以測出的樓層數量。
- 只要找到最小的m使得f(k,m) >= N就得到了解。
狀態轉移方程:
一共有K個雞蛋,可以扔m次。在第X層,扔下雞蛋,此時有兩種情況:
-
雞蛋碎了,雞蛋少了一個,行動次數減少一次;測出N - X + f(k-1,m-1)層,X和它上面的N-X層已經通過這次扔雞蛋確定大于F
-
雞蛋沒碎,雞蛋不減,行動次數減少一次;剩余 X + f(k,m-1),X層及其以下已經通過這次扔雞蛋確定不會大于F
也就是說,每一次扔雞蛋,不僅僅確定了下一次扔雞蛋的樓層的方向,也確定了另一半樓層與F的大小關系,所以在下面的關鍵代碼中,使用的不再是max,而是加法(這里是重點)。這里的相加,不是雞蛋碎了和沒碎兩種情況的相加,而是“本次扔之后可能測出來的層數 + 本次扔之前已經測出來的層數”。
但是狀態轉移方程并不是 f(k,m)= max(f(k-1, m-1), f(k, m-1)) +1
- 而是f(k,m) = f(k-1,m-1) + f(k, m-1) + 1,+1即測試的X層本身。
邊際條件:
只有一個雞蛋K=1時,能移動多少次就能測多少樓。
只能移動一次m=1時,不管多少雞蛋都只能測一層樓。
看了快一天了,還是不太明白。。。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的LeetCode 887. 鸡蛋掉落(DP,难、不懂)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 398. 随机数索引(
- 下一篇: LeetCode 1237. 找出给定方