• [LeetCode] 887. 鸡蛋掉落


    这道题好变态。。。。。。

    import java.util.Arrays;
    
    public class Solution {
    
        public int superEggDrop(int K, int N) {
            // dp[i][j]:一共有 i 层楼梯的情况下,使用 j 个鸡蛋的最少仍的次数
            int[][] dp = new int[N + 1][K + 1];
            
            // 初始化
            for (int i = 0; i <= N; i++) {
                Arrays.fill(dp[i], i);
            }
            for (int j = 0; j <= K; j++) {
                dp[0][j] = 0;
            }
    
            dp[1][0] = 0;
            for (int j = 1; j <= K; j++) {
                dp[1][j] = 1;
            }
            for (int i = 0; i <= N; i++) {
                dp[i][0] = 0;
                dp[i][1] = i;
            }
    
            // 开始递推
            for (int i = 2; i <= N; i++) {
                for (int j = 2; j <= K; j++) {
                    // 在区间 [1, i] 里确定一个最优值
                    int left = 1;
                    int right = i;
                    while (left < right) {
                        // 找 dp[k - 1][j - 1] <= dp[i - mid][j] 的最大值 k
                        int mid = left + (right - left + 1) / 2;
                        
                        int breakCount = dp[mid - 1][j - 1];
                        int notBreakCount = dp[i - mid][j];
                        if (breakCount > notBreakCount) {
                            // 排除法(减治思想)写对二分见第 35 题,先想什么时候不是解
                            // 严格大于的时候一定不是解,此时 mid 一定不是解
                            // 下一轮搜索区间是 [left, mid - 1]
                            right = mid - 1;
                        } else {
                            // 这个区间一定是上一个区间的反面,即 [mid, right]
                            // 注意这个时候取中间数要上取整,int mid = left + (right - left + 1) / 2;
                            left = mid;
                        }
                    }
                    // left 这个下标就是最优的 k 值,把它代入转移方程 Math.max(dp[k - 1][j - 1], dp[i - k][j]) + 1) 即可
                    dp[i][j] = Math.max(dp[left - 1][j - 1], dp[i - left][j]) + 1;
                }
            }
            return dp[N][K];
        }
    }
    
    作者:liweiwei1419
    链接:https://leetcode-cn.com/problems/super-egg-drop/solution/dong-tai-gui-hua-zhi-jie-shi-guan-fang-ti-jie-fang/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    软件工程导论P53,习题2.4
    视图和数据表的区别
    无法从“object”转换为“string”
    Oracle 密码重置
    Struts2 上传下载
    Spring 事务管理
    JSP 指令和动作
    JS 禁用回车、后退事件、form 表单不可编辑
    关于 in 和 exist 的理解
    Oracle clob 操作函数
  • 原文地址:https://www.cnblogs.com/doyi111/p/12683027.html
Copyright © 2020-2023  润新知