扔鸡蛋问题

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;
    }
};
算法竞赛之路 文章被收录于专栏

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

全部评论

相关推荐

去B座二楼砸水泥地:不过也可以理解,这种应该没参加过秋招
点赞 评论 收藏
分享
我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务