leetcode-887. 鸡蛋掉落(DP)
2022/2/25 6:29:59
本文主要是介绍leetcode-887. 鸡蛋掉落(DP),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目链接
题面:
题解:
解法一:
#include<algorithm> using namespace std; class Solution { //dp[i][j] i个鸡蛋测试j层高的楼需要的最少测试次数 int dp[110][10100]; //则有dp[i][j]=min( 1+max(dp[i-1][k-1],dp[i][j-k]) k in [1,j]) //从第k层楼扔下一个鸡蛋 //如果破了,手里有i-1个鸡蛋,测试k-1层楼 //如果没破,手里有i个鸡蛋,测试j-k层楼 //时间复杂度O(k*n*n) public: int superEggDrop(int k, int n) { //最坏步数 for(int i=0;i<=k;i++) { for(int j=0;j<=n;j++) dp[i][j]=j; } for(int i=1;i<=k;i++) { for(int j=1;j<=n;j++) { for(int tmp=1;tmp<=j;tmp++) { //如果还剩0个鸡蛋,则只能测试0层 if(i-1>0||tmp-1==0) dp[i][j]=min(dp[i][j],1+max(dp[i-1][tmp-1],dp[i][j-tmp])); } } } return dp[k][n]; } };
解法二:
#include<algorithm> using namespace std; class Solution { //dp[i][j] i个鸡蛋测试j次最高可以测试dp[i][j]层楼高 //在i个鸡蛋dp[i][j]楼高的情况下,最少需要j次才可以找到f的确切的值 //若楼更高或者鸡蛋更少,则需要更多的测试次数 //因为在最坏的情况下,1个鸡蛋测试n次则可以测试出n层楼,则最多不超过n次 int dp[110][10100]; //则有dp[i][j]=dp[i-1][j-1]+dp[i][j-1]+1 //dp[i-1][j-1] i-1个鸡蛋测j-1次 //dp[i][j-1] i个鸡蛋测j-1次 //+1表示本次测试测出一层楼高度 //假设现在楼高dp[i][j] //进行第一次测试,在第x层 //如果摔破了,则还可以测dp[i-1][j-1] //如果没摔破,则还可以测dp[i][j-1] //我们不关心x是在哪一层,但是我们知道,在x层扔可以取得最优解dp[i][j] //初始值 //dp[i][1]=1 //dp[1][j]=j //时间复杂度O(k*n) public: int superEggDrop(int k, int n) { for(int i=1;i<=k;i++) dp[i][1]=1; for(int j=1;j<=n;j++) dp[1][j]=j; for(int i=2;i<=k;i++) { for(int j=2;j<=n;j++) { //会爆掉int dp[i][j]=min(n,dp[i-1][j-1]+dp[i][j-1]+1); } } for(int j=0;j<=n;j++) if(dp[k][j]>=n) return j; return 0; } };
这篇关于leetcode-887. 鸡蛋掉落(DP)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享