leetcode-887-鸡蛋掉落

题目描述:

 

 

方法一:动态规划+二分搜索O(knlogn) O(kn)

class Solution:
    def superEggDrop(self, K: int, N: int) -> int:
        memo = {}
        def dp(k, n):
            if (k, n) not in memo:
                if n == 0:
                    ans = 0
                elif k == 1:
                    ans = n
                else:
                    lo, hi = 1, n
                    # keep a gap of 2 X values to manually check later
                    while lo + 1 < hi:
                        x = (lo + hi) // 2
                        t1 = dp(k-1, x-1)
                        t2 = dp(k, n-x)

                        if t1 < t2:
                            lo = x
                        elif t1 > t2:
                            hi = x
                        else:
                            lo = hi = x

                    ans = 1 + min(max(dp(k-1, x-1), dp(k, n-x))
                                  for x in (lo, hi))

                memo[k, n] = ans
            return memo[k, n]

        return dp(K, N)
python
class Solution {
    public int superEggDrop(int K, int N) {
        return dp(K,N);
    }
    Map<Integer,Integer> memo = new HashMap();
    public int dp(int K, int N){
        if(!memo.containsKey(N *100 + K)){
            int ans;
            if(N == 0)
                ans = 0;
            else if(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;
                    else if(t2 < t1)
                        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);
    }
}
Java

 

posted @ 2020-04-11 20:08  oldby  阅读(248)  评论(0编辑  收藏  举报