LeetCode 887.鸡蛋掉落(C++)
每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。
你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。
每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X <= N)。
你的目标是确切地知道 F 的值是多少。
无论 F 的初始值如何,你确定 F 的值的最小移动次数是多少?
示例 1:
输入:K = 1, N = 2
输出:2
解释:
鸡蛋从 1 楼掉落。如果它碎了,我们肯定知道 F = 0 。
否则,鸡蛋从 2 楼掉落。如果它碎了,我们肯定知道 F = 1 。
如果它没碎,那么我们肯定知道 F = 2 。
因此,在最坏的情况下我们需要移动 2 次以确定 F 是多少。
示例 2:
输入:K = 2, N = 6
输出:3
示例 3:
输入:K = 3, N = 14
输出:4
提示:
1 <= K <= 1001 <= N <= 10000
转载:思路
根据https://github.com/Shellbye/Shellbye.github.io/issues/42换角度思考得到
dp[k][m] 的含义是k个鸡蛋 移动m次最多能够确定多少楼层
这个角度思考
dp[k][m] 最多能够确定的楼层数为L
那么我选定第一个扔的楼层之后,我要么碎,要么不碎
这就是把L分成3段
左边是碎的那段 长度是dp[k][m - 1]
右边是没碎的那段 长度是dp[k-1][m - 1] 因为已经碎了一个了
中间是我选定扔的楼层 是1
所以递推公式(状态方程)是
dp[k][m] = dp[k - ][m - ] + dp[k][m - ] +
根据递推公式 如果采用k倒着从大到小计算 就可以只存一行的dp[k] 直接原地更新dp[k] 不影响后续计算 只需要O(K)空间复杂度 O(KlogN) 鸡蛋完全够用的时候 就是走LogN步 最差情况是1个鸡蛋走N步 O(KN)
#include <iostream>
#include <vector>
#include <algorithm> using namespace std; static int x = []() {std::ios::sync_with_stdio(false); cin.tie(); return ; }();
class Solution {
public:
int superEggDrop(int K, int N) {
vector<int> dp(K + , );
int m = ;
while (dp[K] < N) {//表示当能够测试的最大楼层数刚好是我们需要的楼层数N时,此时取得m的最小值。
m++;
for (int k = K; k > ; --k) {
dp[k] = dp[k - ] + dp[k] + ;//逆向遍历,不断更新dp[k],使得dp[k]取最大值(能够测试的最大楼层数)
}
}
return m;
}
}; int main()
{
Solution A;
cout << A.superEggDrop(, ); system("PAUSE");
return ;
}
#include <iostream>
#include <vector> using namespace std; class Solution {
public:
int superEggDrop(int K, int N) {
vector<vector<int> > dp(K + , vector<int>(N, ));
int m = ;
while(dp[K][m] < N){
++m;
for(int i = K; i > ; i--)
dp[i][m] = dp[i - ][m - ] + dp[i][m - ] + ;
} return m;
}
}; int main()
{
Solution A;
cout << A.superEggDrop(, ); return ;
}
LeetCode 887.鸡蛋掉落(C++)的更多相关文章
- Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)
887. 鸡蛋掉落 你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑. 每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去. 你知道存在楼层 F ,满足 0 < ...
- 1. 线性DP 887. 鸡蛋掉落 (DP+二分)
887. 鸡蛋掉落 (DP+二分) https://leetcode-cn.com/problems/super-egg-drop/ /*首先分析1个蛋,1个蛋的话,最坏情况需要N次,每次只能从0 1 ...
- 记录Leetcode 鸡蛋掉落 的思路
前言 首先看一下这个题目,是Leetcode的第887题"鸡蛋掉落": 你将获得 `K` 个鸡蛋,并可以使用一栋从 `1` 到 `N` 共有 `N` 层楼的建筑. 每个蛋的功能都是 ...
- 动态规划法(六)鸡蛋掉落问题(一)(egg dropping problem)
继续讲故事~~ 这天,丁丁正走在路上,欣赏着路边迷人的城市风景,突然发现前面的大楼前围了一波吃瓜群众.他好奇地凑上前去,想一探究竟,看看到底发生了什么事情. 原来本市的一位小有名气的科学家 ...
- [LeetCode] 887. Super Egg Drop 超级鸡蛋掉落
You are given K eggs, and you have access to a building with N floors from 1 to N. Each egg is iden ...
- Leetcode 887 Super Egg Drop(扔鸡蛋) DP
这是经典的扔鸡蛋的题目. 同事说以前在uva上见过,不过是扔气球.题意如下: 题意: 你有K个鸡蛋,在一栋N层高的建筑上,被要求测试鸡蛋最少在哪一层正好被摔坏. 你只能用没摔坏的鸡蛋测试.如果一个鸡蛋 ...
- [Swift]LeetCode887. 鸡蛋掉落 | Super Egg Drop
You are given K eggs, and you have access to a building with N floors from 1 to N. Each egg is ident ...
- LeetCode887鸡蛋掉落——dp
题目 题目链接 你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑.每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去,如果没有碎可以继续使用.你知道存在楼层 F , ...
- LeetCode 887. Super Egg Drop
题目链接:https://leetcode.com/problems/super-egg-drop/ 题意:给你K个鸡蛋以及一栋N层楼的建筑,已知存在某一个楼层F(0<=F<=N),在不高 ...
随机推荐
- 自动化打包资源混淆集成python实践----资源混淆
前面自动化打包资源混淆集成python实践----打包一文讲述了四种打包方案,以及美团打包方案.apk注释添加渠道号方案的实现.这里讲集成资源混淆. 1.资源混淆带来的好处: 1)对资源文件起一定的保 ...
- [译]内联Javascript vs 外置Javascript
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- 最新Android的SDK版本与API Level的对应关系
Android 7.1.1 API Level 25 Android 7.0 ...
- C#:最简洁强大的代码生成器
这是我们项目中最常用,也是最强大的代码生成器,可以自动生成 存储过程,Model,DAL,BLL 多层的脚本. 第一步:配置config,设置连接的数据库 <?xml version=" ...
- iOS的iPhone屏幕尺寸、分辨率、PPI和使用123倍图
- JavaEE常用开发工具分享
链接:https://pan.baidu.com/s/1Jxd2Y45LhWAUHc8-dM_ukw 提取码:h50f
- Linux开机自动挂载文件fstab介绍
这个文件描述系统中各种文件系统的信息.一般而言,应用程序仅读取这个文件,而不对它进行写操作.对它的维护是系统管理员的工作. [root@localhost mnt]# cat /etc/fstab # ...
- SpringBoot Junit测试Controller
原文链接:https://blog.csdn.net/xiaolyuh123/article/details/73281522 import java.util.List; import org.sp ...
- mysql8.0的新特性
https://www.cnblogs.com/kevingrace/p/10482469.html MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 ...
- java.lang.Exception: No tests found matching(Junit测试异常)
java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=save], {ExactMatcher:fDispl ...