zoukankan      html  css  js  c++  java
  • [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)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    fetch的使用--当无法判断后台返回数据为什么类型时如何操作
    单页面与多页面间的区别及优缺点
    关于倒计时在关屏后不准确的问题
    前端分页仿百度分页效果
    pc端的弹性布局适配方案
    前端性能优化方向
    居民身份证号码组成规则
    axios简单介绍
    es6 promise 简单总结
    js原型链和原型链的继承
  • 原文地址:https://www.cnblogs.com/doyi111/p/12683027.html
Copyright © 2011-2022 走看看