丢棋子问题2020.12.3_popul的博客-程序员秘密

技术标签: 每日一题  

题目描述:
一座大楼有层,地面算作第0层,最高的一层为第 层。已知棋子从第0层掉落肯定不会摔碎,从第层掉落可能会摔碎,也可能不会摔碎。给定整数作为楼层数,再给定整数作为棋子数,返回如果想找到棋子不会摔碎的最高层数,即使在最差的情况下扔的最小次数。一次只能扔一个棋子。

示例1
输入
10,1
返回值
10
说明
因为只有1棵棋子,所以不得不从第1层开始一直试到第10层,在最差的情况下,即第10层是不会摔坏的最高层,最少也要扔10次
示例2
输入
3,2
返回值
2
说明
先在2层扔1棵棋子,如果碎了,试第1层,如果没碎,试第3层
示例3
输入
105,2
返回值
14
说明
第一个棋子先在14层扔,碎了则用仅存的一个棋子试1~13层
若没碎,第一个棋子继续在27层扔,碎了则用仅存的一个棋子试15~26层
若没碎,第一个棋子继续在39层扔,碎了则用仅存的一个棋子试28~38层
若没碎,第一个棋子继续在50层扔,碎了则用仅存的一个棋子试40~49层
若没碎,第一个棋子继续在60层扔,碎了则用仅存的一个棋子试51~59层
若没碎,第一个棋子继续在69层扔,碎了则用仅存的一个棋子试61~68层
若没碎,第一个棋子继续在77层扔,碎了则用仅存的一个棋子试70~76层
若没碎,第一个棋子继续在84层扔,碎了则用仅存的一个棋子试78~83层
若没碎,第一个棋子继续在90层扔,碎了则用仅存的一个棋子试85~89层
若没碎,第一个棋子继续在95层扔,碎了则用仅存的一个棋子试91~94层
若没碎,第一个棋子继续在99层扔,碎了则用仅存的一个棋子试96~98层
若没碎,第一个棋子继续在102层扔,碎了则用仅存的一个棋子试100、101层
若没碎,第一个棋子继续在104层扔,碎了则用仅存的一个棋子试103层
若没碎,第一个棋子继续在105层扔,若到这一步还没碎,那么105便是结果

class Solution {
public:
int solve(int n, int k) {
if(n < 1)
return 0;
if(k == 1)
return n;
int logtimes = log2(n) + 1;
if( k >= logtimes)
return logtimes;
vectorf(k+1,0);
int cnt=0;
while(f[k] < n)
{
++cnt;
for(int i = k;i > 0;–i)
f[i] += f[i-1] + 1;
}
return cnt;
}
};

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/popul/article/details/110670126

智能推荐

数据处理-倾斜摄影OSGB合并根节点_孙霸天的博客-程序员秘密

web三维地图引擎我们使用的是cesium,因此我们使用的倾斜摄影数据(OSGB)会转换成3DTiles(.b3dm)进行加载。如果倾斜摄影的范围很大或者数据量大,有不少的建筑物什么的,默认转换的3Dtiles数据在前台加载会很慢帧数很低不流畅。目前解决的方法有以下几种:- 压缩材质(减少数据大小,或降低显存占用大小,模型可能会由精度丢失)- 顶点压缩(对数据进行顶点压缩,会丢失一定精度)- 合并根节点(将倾斜层级合并为更粗糙一层,减少前台加载的节点数据,提升访问速度).........

为什么系统进入到Checking Media Presence_Macle_Chen的博客-程序员秘密

你按联想热启键来开机,也就是那个还原键来开机。然后你选择BIOS Setup回车.选择Boot这项的boot mode把UEFI改成legacy support和boot priority把UEFI改成legacy 然后保存退出就可以了 希望对你有用为什么系统进入到Checking Media Presence

SQL语句--mysql排名、分组后组内排名、取各组的前几名_Jalen data analysis的博客-程序员秘密

一、整体排名(3种)。-- 普通排名:从1开始,顺序往下排;-- 并列排名:相同的值是相同的排名,不用占空位;-- 并列排名:相同的值是相同的排名,需要占空位;二、分组后组内排名(3种)。--分组普通排名:顺序排名;-- 组内并列排名:相同的值是相同的排名,不需要占空位;-- 组内并列排名:相同的值是相同的排名,需要占空位;三、分组后取各组的前N名.

【Apache Hadoop】MapReuce 编程总结-多MapReduce执行_怎么在mapreduce可以在map过程中执行一个循环方法吗_Jonathan-Wei的博客-程序员秘密

学习hadoop,必不可少的就是写MapReduce程序,当然,对于简单的分析程序,我们只需一个MapReduce就能搞定,但是对于比较复杂的分析程序,我们可能需要多个Job或者多个Map或者Reduce进行分析计算。 多Job或者多MapReduce的编程形式有以下几种:1、迭代式MapReduce2、依赖关系式MapReuce3、链式MapReduce4、子Job式MapReduce

初识R语言之条件循环篇_r 条件循环命令_王小王-123的博客-程序员秘密

pool = 1:10for(fish in pool){ print(fish)}通过循环操作读取文件并进行数据的处理files = c('DEG1.xls', 'DEG2.xls', 'DEG3.xls', 'DEG4.xls')n = 1for(file in files){ print(paste0('DEG unfiltered file is ', file)) # 1 reading DEG unfiltered file df = read.deli..

解决java.sql.BatchUpdateException: ORA-01000: 超出打开游标的最大数_美少女降临人世间的博客-程序员秘密

原因:Java代码在执行conn.createStatement()和 conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的 createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。游标一直在不停的打开,而且没有关闭。一般情况createStatement和prepare...

随便推点

matlab 分布拟合,曲线拟合和分布拟合 - MATLAB & Simulink Example - MathWorks 中国_Lta De的博客-程序员秘密

在曲线拟合与分布拟合之间进行选择曲线拟合和分布拟合是不同类型的数据分析。当您要将某个响应变量建模为预测变量的函数时,请使用曲线拟合。当您要为单一变量的概率分布建模时,请使用分布拟合。曲线拟合在以下试验数据中,预测变量为 time,即服用药物之后的时间。响应变量为 conc,即血液中的药物浓度。假设只有响应数据 conc 受试验误差的影响。time = [ 0.1 0.1 0.3 0.3...

vue-cli项目中img使用require动态获取图片_余人于RenYu的博客-程序员秘密

今天做图片渲染模块时,发现img的拼接都忘了,发现怎么拼都不能实现,所以就查了下资料发现,要使用require,具体就看下面这里在motheds 中定义了个方法获取这样就可以了。。。。。...

Goproxy(Go模块代理)的使用与配置_go proxy bing_小小平不平凡的博客-程序员秘密

Goproxy官网地址:https://goproxy.cn/一、使用步骤1、查看本地go的环境配置信息go env具体信息如下:GO111MODULE=""GOARCH="amd64"GOBIN=""GOCACHE="/Users/sundgping/Library/Caches/go-build"GOENV="/Users/sundgping/Library/Application Support/go/env"GOEXE=""GOFLAGS=""GOHOSTARCH="amd

失而复得的爱情 _xiao77论坛文学欣赏_xiao7733bbb的博客-程序员秘密

 那年夏天,长江边,夕阳还有一点点余辉,欢快的蛐蛐叫个不停。他和她坐在江边的石阶上,凝视波浪起伏的江面,任晚风吹乱本已理不清的思绪。  父母的叮咛始终绕在他的耳畔:“到大学要好好学习,你是我们的骄傲。”他不想因为谈恋爱而影响学习,让父母失望。虽然,她曾为他付出了很多,同时,他也恨自己,为什么当初要接受她?而她也知道他要对她说什么。  江水是浑浊的,心是沉重的。  风起了,江里的浪一浪高过一浪,气温

时变系统多传感器信息融合kalman滤波器_时变卡尔曼滤波_HX71的博客-程序员秘密

前面的博客中讲得都是针对一种传感器的测量值有状态空间模型对系统状态值进行估计,本次博客讨论多传感器下对系统状态值估计的方法,即多传感器的数据融合。多传感器的状态融合又分成两种:1.集中式kalman滤波;2.分布式卡尔曼滤波。集中式kalman滤波是通过将多个观测方程集中为一个观测方程,然后进行标准kalman滤波,该方法可以得到全局的最优估计,但是缺点也是很明显,多个观测方程集中为一个观测方程,...