zoukankan      html  css  js  c++  java
  • 2018年第九届蓝桥杯B组第四题:摔手机题解

    摔手机

    摔手机 动态规划  在蓝桥杯的时候遇到一次 当时没有做对  看了题解也没明白  如今再次遇到这个类似的题目

     于是拿出来补补吧

    摔手机题目如下:

    星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。
    各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。


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


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


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


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


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




    之前做题目时比较天真  觉得   二分 摔手机最优啦  ╮( ̄▽ ̄")╭   ╮( ̄▽ ̄")╭   菜鸡的天真


    对于这个题目  我们也可以设计一个状态  dp[i][j]   i代表手机的数目    j代表层数   dp[i][j]为i个手机j层最佳的策略 最糟糕的次数


    下面就是要去求  dp[i][j]是多少啦

    假如这里有j层   那么我们可以选择一层  第k层 把手机摔下去  当然  0<k<j
    那么我们丢下去就有2种可能  一种是摔坏了  一种是没有摔坏
    摔坏了  那么我们就要从  这1到k-1层中去找  那么我们从第k层摔下去 摔坏了后 所需要的摔手机的次数 就是 dp[i-1][k-1]+1
    如果没有摔坏  我们就要从k+1到j这 j-k层中去找   那么我们从第k层摔下去 没有摔坏后 所需要的摔手机的次数 就是 dp[i1][j-k]+1
    因为是最糟糕的情况 所以我们要这两种情况的最大值

    但是k层能有好多种选择   把k遍历一遍    这这么一堆情况的最小值  那个最小值就是  dp[i][j]  即为  我们i个手机从第j层丢下去 测试那层摔坏的最优策略的最糟糕的次数

    感觉比较绕绕的

    可以使用递推推出来  在递推之前还要预处理一下  即1个手机  测试多少层   那么次数就多少层
                                                                                 一共1层 无论多少个手机 都是测试一次
                                                                                 一共0层 无论多少个手机 都是测试零次

          代码如下
            int dp[51][1001];
     memset(dp,0x3f,sizeof(dp));
    for(int i=1;i<1001;i++)dp[1][i]=i;
    for(int i=1;i<51;i++)dp[i][0]=0;
    for(int i=1;i<51;i++)dp[i][1]=1;
     for(int j=2;j<51;j++)
    for(int i=1;i<1001;i++){
    for(int k=1;k<i;k++)
        dp[j][i]=min(max(dp[j-1][k-1],dp[j][i-k])+1,dp[j][i]);
    }
         下面要几个手机几层楼 至少需要次数多少次 就好像一个表一样 直接查询就可以了



  • 相关阅读:
    Java开发最佳实践(一) ——《Java开发手册》之"编程规约"
    小程序websocket心跳库——websocket-heartbeat-miniprogram
    并发与多线程
    SqlSessionFactory、SqlSessionFactoryBean、SqlSession和SqlSessionTemplate的不解姻缘系列之一(总体阐述)
    全网最通俗易懂理清mybatis中SqlSession、SqlSessionTemplate、SessionFactory和SqlSessionFactoryBean之间的关系
    java代码之美(16) ---Java8 Optional
    Java基础——多线程
    代码简洁之道(判断篇)
    Spring Boot 入门
    Mybatis Plus入门
  • 原文地址:https://www.cnblogs.com/DWVictor/p/10283212.html
Copyright © 2011-2022 走看看