扔鸡蛋问题

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

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

全部评论

相关推荐

07-15 11:35
门头沟学院 Java
心里踏实多了,可以安心准备论文了
看不见我ffgh:牛哇佬,要不要来试一试pdd,部门氛围很好
京东开奖153人在聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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