leetcode_887_鸡蛋掉落___循序渐进的分析

分析:对于一组[n,k] 在一次尝试中选择了在dep层测试 其可以分为    

如果在dep层炸了: 则变成了[dep-1,k-1]读作在dep-1层用k-1个鸡蛋来找鸡蛋的极限所需次数

如果在dep层没炸: 则变成了[n-dep,k]读作在n-dep层用k个鸡蛋来找鸡蛋的极限所需次数

可以发现这都是子问题的传递,而这也是可以使用动态规划的依据。

为了保证能完成,所以对于 [n,k]在一次dep的选择时,需要取max([dep-1,k-1],[n-dep,k])

但对与每个dep产生的max([dep-1,k-1],[n-dep,k])需要取最小值,因为在能完成的情况下要找最少的次数

        需要注意的是,对于上述理论只有在k>=2时成立,因为当n==1时其已经没有,任何容错,除当前不知道是否能承受的最小值进行遍历尝试才能确保找到。

        动态规划代码

class Solution {
public:
    int dp[10005][101];
    int superEggDrop(int k, int n) {
        if(k==1){return n;}
        for (int d = 1; d <= n; d++)
            for (int j = 1; j <= k; j++) {
                dp[d][j] = 1005;
                for (int i = 1; i <= d; i++) {
                    dp[d][j] =
                        min(dp[d][j], max((j == 2 ? i - 1 : dp[i - 1][j - 1]),
                                          dp[d - i][j]) + 1);
                }
            }
        return dp[n][k];
    }
};

时间复杂度:O(n^2*k);虽说使用的是动态归划但是也很暴力,时间上通不过

优化

        反转问题求在num次投掷中最多能映射到哪些层

        对于一组[num,Egg]能映射到最多多少层可分为

        一次尝试蛋炸了剩[num-1,Egg-1]与
        一次尝试蛋没炸[num-1,Egg]此处和上面不太相同[num,Egg]=[num-1,Egg-1]+[num-1,Egg]+1

解释:对于一组[now_num,now_Egg] 

假设我们当前知道了所有1<num<now_num1<Egg<now_Egg的组合能映射到的最多层数

例如      一组[5,2]最多能映射到A 层        一组 [5,3]最多能映射到B 层

在一次对X层的测试中,为了使[6,3]映射的尽可能多 则排布方式为[5,2] X [5,3]总计A+B+1层,

又找到了子问题可以继续递推,下面为递归实现出口为num=0||k==1;

代码

class Solution {
public:
    int calc(int k, int t) {
        if (k == 1 || t == 0) {
            return t;
        }
        return calc(k - 1, t - 1) + calc(k, t - 1) + 1;
    }
    int superEggDrop(int k, int n) {
        int t = 1;
        while (calc(k, t++) < n)
            ;
        return t - 1;
    }
};

为了使t尽可能小使用对t从一开始网上找,此处也可二分优化时间将进一步提升

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/893936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python爬虫实战】正则:从基础字符匹配到复杂文本处理的全面指南

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、正则表达式 &#xff08;一&#xff09;正则表达式的基本作用 &#xf…

【RabbitMQ】RabbitMQ 7种工作模式简单使用示例

目录 1. 简单模式 2. Work Queues(作队列) 3. Publish/Subscribe(发布/订阅) 4. Routing(路由模式) 5. Topics(通配符模式) 6. RPC(RPC通信) 7. Publisher Confirms(发布确认) 7.1Publishing Messages Individually(单独确认) 7.2 Publishing Messages in Batches(批…

【实战篇】用SkyWalking排查线上[xxl-job xxl-rpc remoting error]问题

一、组件简介和问题描述 SkyWalking 简介 Apache SkyWalking 是一个开源的 APM&#xff08;应用性能管理&#xff09;工具&#xff0c;专注于微服务、云原生和容器化环境。它提供了分布式追踪、性能监控和依赖分析等功能&#xff0c;帮助开发者快速定位和解决性能瓶颈和故障。…

Tbox编译注意问题

Tbox是一个强大的开源库&#xff0c;感谢做为ruki的无私奉献。 tbox: 跨平台的c开发库&#xff0c;提供asio、stream、容器、算法、xml/json/plist解析、数据库等常用模块 在使用tbox开源库的数据库模块时&#xff0c;没有使用xmake进行编译&#xff0c;而是使用make编译的。…

Golang | Leetcode Golang题解之第474题一和零

题目&#xff1a; 题解&#xff1a; func findMaxForm(strs []string, m, n int) int {dp : make([][]int, m1)for i : range dp {dp[i] make([]int, n1)}for _, s : range strs {zeros : strings.Count(s, "0")ones : len(s) - zerosfor j : m; j > zeros; j--…

数据库血缘工具学习,使用以及分享

一.血缘关系是什么&#xff1f;为什么要分析血缘关系&#xff1f; 首先&#xff0c;什么是血缘关系&#xff1f; 是指在数据的全生命周期中&#xff0c;从数据的产生、处理、加工、融合、流转到最终消亡&#xff0c;数据之间自然形成的一种类似人类血缘的关联关系。 说的再简…

PyTorch 2.5 发布带来一些新特性和改进

官网&#xff1a;https://github.com/pytorch/pytorchGitHub&#xff1a;https://github.com/pytorch/pytorch原文&#xff1a;https://github.com/pytorch/pytorch/releases/tag/v2.5.0 主要亮点 (Highlights)] SDPA CuDNN 后端&#xff1a;为 torch.nn.functional.scaled_d…

Zico 2 靶机 - 详细流程

✨ 准备工作 靶机 && kali 环境要求 机器名网络配置靶机Zico 2NAT 模式攻击机kaliNAT 模式 靶机下载链接&#xff1a;zico2: 1 ~ VulnHub 打开 VMware&#xff0c;将 zico2.ova 拖拽到 VMware 中 设置 虚拟机名称(A) - 存储路径(P)- 导入 若是&#xff0c;…

3DsMax删除FBX 导出的预设

3DsMax删除FBX 导出的预设 文档 https://help.autodesk.com/view/3DSMAX/2025/CHS/?guidGUID-9939F041-5E2D-4AA8-A732-6C2A1DFB5314删除静态FBX 这个预设 使用everything 搜索预设文件的后缀.fbxexportpreset &#xff0c;然后 文件路径 C:\Users\GoodCooking\Documents\3…

C++标准模板库--vector

vector 介绍 vector&#xff08;向量&#xff09;是一种序列容器&#xff0c;表示为可以改变大小的数组。vector中的元素使用连续的存储位置&#xff0c;这意味着也可以使用指向其元素的常规指针偏移量来访问任意元素&#xff0c;且与数组一样高效。但与数组不同的是&#xff…

React01 开发环境搭建

React 开发环境搭建 一、创建 React 项目二、项目精简 一、创建 React 项目 执行下述命令创建 react 项目 blu-react-basis npx create-react-app blu-react-basis项目目录结构如下&#xff1a; 执行下述命令启动项目 npm run start启动效果如下&#xff1a; 二、项目精简 …

51单片机的万年历【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块时钟模块按键蜂鸣器等模块构成。适用于电子万年历、数字时钟万年历等相似项目。 可实现功能: 1、LCD1602实时显示年月日星期和北京时间&#xff0c;具备闰年判断功能 2、按键可设置闹钟时间 3、按键可修改当前时…

案例-登录认证

案例-登录认证 在前面的课程中&#xff0c;我们已经实现了部门管理、员工管理的基本功能&#xff0c;但是大家会发现&#xff0c;我们并没有登录&#xff0c;就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的&#xff0c;所以我们今天的主题就是登录认证。 最终我们…

redo文件误删除后通过逻辑备份进行恢复

问题描述 开发同事让在一个服务器上查找下先前库的备份文件是否存在&#xff0c;如果存在进行下恢复。翻了服务器发现备份文件存在&#xff0c;多愁了一眼竟翻到了该备份文件于2024.6.17日恢复过的日志&#xff0c;赶紧和开发沟通说2024.6.17号已经恢复过了为啥还要恢复&#x…

空间大数据的数据变换与价值提炼

在数字化时代&#xff0c;空间大数据正成为推动社会经济发展的关键因素。空间大数据不仅体量巨大&#xff0c;而且具有高速流转、多样类型和真实性等特点&#xff0c;它们在获取、存储、管理、分析方面超出了传统数据库软件工具的能力范围。地理信息系统&#xff08;GIS&#x…

AWS账号与邮箱的关系解析

在当今数字化时代&#xff0c;云计算服务的普及使得越来越多的企业和个人用户开始使用亚马逊网络服务&#xff08;AWS&#xff09;。作为全球领先的云服务平台&#xff0c;AWS为用户提供了丰富的计算、存储和数据库服务。然而&#xff0c;对于许多新用户来说&#xff0c;关于AW…

openresty通过header_filter_by_lua记录特定的请求头和特定的响应头到日志文件

有时我们希望记录特定的请求头信息和特定的响应头信息,以便能够通过关联请求信息和响应头信息,来实现记录请求和响应的对应关系。这里通过逐步尝试和优化的方式进行尝试。具体包括将需要的请求头和响应头组织到一条日志记录,输出到单独的错误日志文件记录等的配置尝试。 1.…

C语言中的文件操作:从基础到深入底层原理

文件操作是几乎所有应用程序的重要组成部分&#xff0c;特别是在系统级编程中。C语言因其高效、灵活以及接近硬件的特点&#xff0c;成为了文件操作的理想选择。本文将全面深入地探讨C语言中的文件操作&#xff0c;从文件系统的概念到具体的文件操作函数&#xff0c;再到底层的…

c++的哈希表、哈希桶的介绍与实现

目录 前言 哈希概念 哈希冲突 哈希函数 哈希冲突解决 闭散列 —— 开放定址法 开散列 —— 链地址法&#xff08;拉链法、哈希桶&#xff09; 哈希表的闭散列实现 哈希表的结构 哈希表的仿函数 哈希表的插入 哈希表的查找 哈希表的删除 哈希表的开散列实现&#xff…