题目:你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。 每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。 你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。 每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X <= N)。 你的目标是确切地知道 F 的值是多少。 无论 F 的初始值如何,你确定 F 的值的最小移动次数是多少?
题解做法:有时间再看吧,其实都没太理解题意。。
classSolution{publicintsuperEggDrop(int K,int N){returndp(K, N);}
Map<Integer, Integer> memo =newHashMap();publicintdp(int K,int N){if(!memo.containsKey(N *100+ K)){int ans;if(N ==0)
ans =0;elseif(K ==1)
ans = N;else{int lo =1, hi = N;while(lo +1< hi){int x =(lo + hi)/2;int t1 =dp(K-1, x-1);int t2 =dp(K, N-x);if(t1 < t2)
lo = x;elseif(t1 > t2)
hi = x;else
lo = hi = x;}
ans =1+ Math.min(Math.max(dp(K-1, lo-1),dp(K, N-lo)),
Math.max(dp(K-1, hi-1),dp(K, N-hi)));}
memo.put(N *100+ K, ans);}return memo.get(N *100+ K);}}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/super-egg-drop/solution/ji-dan-diao-luo-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。