C++ | Leetcode C++题解之第458题可怜的小猪

题目:

题解:

cpp 复制代码
class Solution {
public:
    int poorPigs(int buckets, int minutesToDie, int minutesToTest) {
        if (buckets == 1) {
            return 0;
        }
        vector<vector<int>> combinations(buckets + 1,vector<int>(buckets + 1));
        combinations[0][0] = 1;
        int iterations = minutesToTest / minutesToDie;
        vector<vector<int>> f(buckets,vector<int>(iterations + 1));
        for (int i = 0; i < buckets; i++) {
            f[i][0] = 1;
        }
        for (int j = 0; j <= iterations; j++) {
            f[0][j] = 1;
        }
        for (int i = 1; i < buckets; i++) {
            combinations[i][0] = 1;
            combinations[i][i] = 1;
            for (int j = 1; j < i; j++) {
                combinations[i][j] = combinations[i - 1][j - 1] + combinations[i - 1][j];
            }
            for (int j = 1; j <= iterations; j++) {
                for (int k = 0; k <= i; k++) {
                    f[i][j] += f[k][j - 1] * combinations[i][i - k];
                }
            }
            if (f[i][iterations] >= buckets) {
                return i;
            }
        }
        return 0;
    }
};
相关推荐
小范馆4 分钟前
C++ 编译方法对比:分步编译 vs 一步到位
java·开发语言·c++
云泽80810 分钟前
C++ 继承进阶:默认成员函数、多继承问题与继承组合选型
开发语言·c++
一颗青果19 分钟前
C++下的atomic | atmoic_flag | 内存顺序
java·开发语言·c++
Tisfy19 分钟前
LeetCode 1292.元素和小于等于阈值的正方形的最大边长:二维前缀和(无需二分)+抽象速懂的描述
算法·leetcode·职场和发展
跃渊Yuey34 分钟前
【Linux】Linux进程信号产生和保存
linux·c语言·c++·vscode
程序员-King.37 分钟前
day156—回溯—组合总和(LeetCode-216)
算法·leetcode·回溯
努力学算法的蒟蒻37 分钟前
day60(1.19)——leetcode面试经典150
算法·leetcode·面试
好评12439 分钟前
【C++】AVL树:入门到精通全图解
数据结构·c++·avl树
漫随流水40 分钟前
leetcode回溯算法(216.组合总和Ⅲ)
数据结构·算法·leetcode·回溯算法
机器视觉知识推荐、就业指导44 分钟前
Qt 6 所有 C++ 类(官方完整清单 · 原始索引版)
开发语言·c++·qt