2018年第九届蓝桥杯B组第四题:摔手机题解

题目:测试次数

星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机!

       各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。

        x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。 

        如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。####特别地,如果手机从第1层扔下去就坏了,则耐摔指数=0。

        如果到了塔的最高层第n层扔没摔坏,则耐摔指数=n 

        为了减少测试次数,从每个厂家抽样3部手机参加测试。

       某次测试的塔高为1000层,如果我们总是采用最佳策略,在最坏的运气下最多需要测试多少次才能确定手机的耐摔指数呢?

        请填写这个最多测试次数。

        注意:需要填写的是一个整数,不要填写任何多余内容。

看到题目的第一眼👀,我的直观感受就是二分法哇,太简单了,捡到了捡到了。

后来,考完很久以后,我又重新刷题,感觉不对,应该不是这么简单的。应该是DP动态规划!

题解:

1、理解题意: 

        已知n是耐摔指数,有3部手机,求解最坏情况下至少摔K次。

        在此题,n可能是区间[0,1000]上的任意一个数字,那么我们保证在K次里,不论n = 0,1,... ,1000 中的哪个数字,我们都能准确确定n的值。

2、抽象成模型:

         抽象成一根数轴,n在区间[0,1000]

        我设dp[ind][cnt]为    ind为区间长度,cnt部手机,数组dp记录确定n需要的局部最少次数。

         如果只有 1 部手机,那就只能从小到大,一次一次实验。直测试出n。

         如果有 2 部手机,我们开始分块,

         分成1:999,2:998,3:997,...... 诸如此类 所以我也不知道哪种分块最优啊,当然是暴力遍历一遍啦!

        这时候状态就可以转化成:到底碎不碎了?

        如果在K层碎了,问题就等价成:搜索区间 [0,k-1]的次数 + 1;

        如果在K层没有碎,问题就等价成:搜索区间[k+1,1000]的次数 + 1;  

思考一下,确定n\in [k,1000] 所需要的次数   是不是  等价于  确定n\in [0,1000 - k] 所需要的次数!因为区间长度一致哇!

         如果有cnt部手机,ind层时,

         dp[ind][cnt] = Min(dp[ind-1][cnt]+1 , 1+Max( dp[k - 1][cnt - 1] , dp[ ind-k ][ cnt ] )  )

解释一下  用Max函数和Min函数:

我们本意是写一个算法,实现对n是任何可能值的求解。

假设层数是6,2部手机,看图解:


结论:题目实际是求全局最优解——常用方法DP!

DP:全局最优——>局部最优——>求动态转移方程

就是用动态规划的思想,去走遍所有所可能的情况,通过条件限制,求最小次数啦。

Max:最坏情况的判断,n=2是最好情况,可是如果这些手机耐摔指数

n=0,1,2,3,4,5,6呢!

Min:最少次数的选择,情况虽然不妙!但是我们可以尽量少花力气去摔手机哇!

选出确定dp[ ind ][ cnt ]需要的最小次数。

状态方程就这么总结出来啦!!!

 dp[ind][cnt] = Min( dp[ind-1][cnt]+1 , 1+Max( dp[k - 1][cnt - 1] , dp[ ind-k ][ cnt ] )  )

3、代码实现:

#include

#define Max(a,b) (a>b?a:b)

#define Min(a,b) (a<b?a:b)

intdp[1002][5];

intmain(){

    for(inti =1; i <=1000; i++){//初始化边界

        dp[i][1] = i;

    }

    for(intcnt =2; cnt <=3; cnt++){

        for(intind =1; ind <=1000; ind++){

            dp[ind][cnt] =dp[ind-1][cnt] +1;

            for(intk =2; k <= ind; k++){

                dp[ind][cnt] =Min(dp[ind][cnt],1+Max(dp[k-1][cnt-1],dp[ind-k][cnt]));

            }

        }

    }

    printf("%d\n",dp[1000][3]);

    return 0;

}

第一次写题解,写得不好的地方请大家指出。帮我进步!(其实放图是因为我不会换行)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容