887 雞蛋掉落

2021-09-24 21:18:47 字數 994 閱讀 9399

你將獲得 k 個雞蛋,並可以使用一棟從 1 到 n 共有 n 層樓的建築。

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

你知道存在樓層 f ,滿足 0 <= f <= n 任何從高於 f 的樓層落下的雞蛋都會碎,從 f 樓層或比它低的樓層落下的雞蛋都不會破。

你的目標是確切地知道 f 的值是多少。

無論 f 的初始值如何,你確定 f 的值的最小移動次數是多少?

二分法 88ms

class solution 

int minimum = 1 + min(

max(search(k - 1, low - 1,middleresults), search(k, n - low,middleresults)),

max(search(k - 1, high - 1,middleresults), search(k, n - high,middleresults))

);middleresults[k][n]=minimum;

return middleresults[k][n];

}int supereggdrop(int k, int n)

};

動態規劃 16ms

dp[k][m] 的含義是k個雞蛋 移動m次最多能夠確定多少樓層

這個角度思考

dp[k][m] 最多能夠確定的樓層數為l

那麼我選定第乙個扔的樓層之後,我要麼碎,要麼不碎

這就是把l分成3段

左邊是碎的那段 長度是dp[k][m - 1]

右邊是沒碎的那段 長度是dp[k-1][m - 1] 因為已經碎了乙個了

中間是我選定扔的樓層 是1

所以遞推公式是

dp[k][m] = dp[k - 1][m - 1] + dp[k][m - 1] + 1

class solution }}

return n;

}};

887 雞蛋掉落

你將獲得 k 個雞蛋,並可以使用一棟從 1 到 n 共有 n 層樓的建築。每個蛋的功能都是一樣的,如果乙個蛋碎了,你就不能再把它掉下去。你知道存在樓層 f 滿足 0 f n 任何從高於 f 的樓層落下的雞蛋都會碎,從 f 樓層或比它低的樓層落下的雞蛋都不會破。你的目標是確切地知道 f 的值是多少。無...

887 雞蛋掉落

你將獲得k個雞蛋,並可以使用一棟從1到n共有n層樓的建築。每個蛋的功能都是一樣的,如果乙個蛋碎了,你就不能再把它掉下去。你知道存在樓層f,滿足0 f n任何從高於f的樓層落下的雞蛋都會碎,從f樓層或比它低的樓層落下的雞蛋都不會破。你的目標是確切地知道f的值是多少。無論f的初始值如何,你確定f的值的最...

887 雞蛋掉落

就假如當前有n層樓要確認,k個雞蛋。那麼列舉當前雞蛋放在x後變成了兩個子問題dfs x 1,k 1 dfs n x,k dfs就好。複雜度為o nkn 狀態數枚舉次數 考慮到dp n k 隨著n遞增而遞增,所以固定k對所有x畫圖後發現 dfs x 1,k 1 遞增,dfs n x,k 遞減。那麼要想...