887.鸡蛋滑落-Leetcode(动态规划)

题目

在这里插入图片描述

思路

先定义二维数组,第一个维度索引表示剩余鸡蛋数,第二个维度索引表示楼层数,数组元素表示最小操作数。借鉴参考背包问题,根据规律,找出联系,构造式子,编写代码。
再前者的基础上,第二个维度表示操作数,元素表示最大楼层数,当前元素值不小于输入楼层值时即返回第二个维度的数字。
最后将原先的数组转化成一维的数组的形式。索引只表示剩余鸡蛋数,借助之前求解的答案累加。

C

short superEggDrop(int m, int n) {

        if (n == 1)return 1;
        int* dp=(int *)calloc(m+1,sizeof(int));
        // 分配内存并赋值为0

        short ans = 0;
        short i;
        do{
            ans++;
            i = 0;
            do{
                dp[i]+=(dp[i+1] + 1);
            }while(++i<m);
        }while(dp[0]<n);
        free(dp);
        dp=NULL;
        return ans;
    }

在这里插入图片描述

Cpp

class Solution {
public:
    short superEggDrop(int m, int n) {
        if (n == 1)return 1;
        int* dp = new int[m+1]{0};
        short ans = 0;
        short i;
        do{
            ans++;
            i = 0;
            do{
                dp[i]+=(dp[i+1] + 1);
            }while(++i<m);
        }while(dp[0]<n);
        return ans;
    }
};

在这里插入图片描述

Python

class Solution:
    def superEggDrop(self, m, n):
    
        dp = [0]*m
        d = 1
        ans = 1
        m-=1
        while d < n:
            ans += 1
            for i in range(m):
                dp[i] += dp[i + 1] + 1
            d+=1+dp[0]
        return ans

在这里插入图片描述

Python3

class Solution:
    def superEggDrop(self, m: int, n: int) -> int:
        if n == 1:
            return 1
        dp = [0] * (m + 1)
        ans = 0
        while dp[m] < n:
            ans += 1
            for i in range(m, 0, -1):
                dp[i] += dp[i - 1] + 1
        return ans

在这里插入图片描述

Golang

func superEggDrop(m int, n int) int {
    if n == 1{
        return 1
    }
    var dp [101]int

    dp[0]=1
    var ans int
    for dp[0]<n{
        ans+=1
        for i:=1;i<m;i++{
            dp[i]+=dp[i+1]+1
        }
        dp[0]+=1+dp[1]
        
    }
    return ans+1
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值