扔鸡蛋问题

f[i][j]f[i][j]表示i次操作j个鸡蛋最高能测到多少层楼

f[1][1 to n]=1f[1][1\ to\ n] = 1,因为只能操作一次的话,只能假定1楼碎。

f[i][j]=1+f[i1][j1]+f[i1][j]f[i][j] = 1 + f[i - 1][j - 1] + f[i - 1][j] 本层楼的高度

如果鸡蛋没有碎,那么对应的是 f(t1,k)f(t - 1, k),也就是说在这一层的上方可以有f(t1,k) f(t - 1, k) 层;

如果鸡蛋碎了,那么对应的是 f(t1,k1)f(t - 1, k - 1),也就是说在这一层的下方可以有f(t1k1) f(t - 1, k - 1)层。

class Solution {
public:
    int superEggDrop(int k, int n) {
        if (n == 1) {
            return 1;
        }
        vector<vector<int>> f(n + 1, vector<int>(k + 1));
        for (int i = 1; i <= k; ++i) {
            f[1][i] = 1;
        }
        int ans = -1;
        for (int i = 2; i <= n; ++i) {
            for (int j = 1; j <= k; ++j) {
                f[i][j] = 1 + f[i - 1][j - 1] + f[i - 1][j];
            }
            if (f[i][k] >= n) {
                ans = i;
                break;
            }
        }
        return ans;
    }
};
算法竞赛之路 文章被收录于专栏

整理、记录算法竞赛的好题

全部评论

相关推荐

测试糕手手:社会第一课,随便吹牛逼,直接说四个月,别老实。老实人只会被欺负
点赞 评论 收藏
分享
06-27 15:15
长安大学 Java
哈哈哈,你是老六:这种就是培训机构骗钱的
点赞 评论 收藏
分享
05-23 20:31
已编辑
武汉大学 Java
内向的柠檬精在研究求...:注意把武大标粗标大 本地你俩不是乱杀
实习进度记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务