1884. 鸡蛋掉落-两枚鸡蛋

/**

给你 2 枚相同 的鸡蛋,和一栋从第 1 层到第 n 层共有 n 层楼的建筑。

已知存在楼层 f ,满足 0 <= f <= n ,任何从 高于 f 的楼层落下的鸡蛋都 会碎 ,从 f 楼层或比它低 的楼层落下的鸡蛋都 不会碎 。

每次操作,你可以取一枚 没有碎 的鸡蛋并把它从任一楼层 x 扔下(满足 1 <= x <= n)。如果鸡蛋碎了,你就不能再次使用它。如果某枚鸡蛋扔下后没有摔碎,则可以在之后的操作中 重复使用 这枚鸡蛋。

请你计算并返回要确定 f 确切的值 的 最小操作次数 是多少?

**/

class Solution {

    int[][] mem;

    public int twoEggDrop(int n) {

        mem = new int[n+1][2+1];

        return dp(2,n);

    }

    public int dp(int k,int n){

        if(k==1){

            return n;

        }

        if(n==0){

            return 0;

        }

        if(mem[n][k] != 0){

            return mem[n][k];

        }

        int res = Integer.MAX_VALUE;

        for(int i=1;i<=n;i++){

            res = Math.min(res,Math.max(dp(k,n-i),dp(k-1,i-1))+1);

        }

        mem[n][k] = res;

        return res;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容