题目

题目描述
小招喵喜欢在数轴上跑来跑去,假设它现在站在点n处,它只会3种走法,分别是:
1.数轴上向前走一步,即n=n+1
2.数轴上向后走一步,即n=n-1
3.数轴上使劲跳跃到当前点的两倍,即n=2*n
现在小招喵在原点,即n=0,它想去点x处,快帮小招喵算算最快的走法需要多少步?

输入描述:
小招喵想去的位置x

输出描述:
小招喵最少需要的步数

示例1
输入

3

输出

3

题目链接

解题思路

很明显是一道动态规划题目
设dp[i]表示到达i点的最少步数
最少就需要考虑两倍的走法

  • 如果当前位置能被2整除,说明可以转化为当前元素位置除以2之后的元素位置的最少步数+跳到本次位置的步数(1步)
    举个例子
    2 3 4 5 6
    如果从2开始出发到达4,4能被2整除,(dp[i] = dp[i/2]+1) 所以dp[4]=dp[2]+1,那dp[2]等于多少,还是这个思路,将一个大问题转化为n个小问题正是动态规划的魅力
  • 如果当前位置不能被2整除,那么就有2种选择了
    例如从2走到5
    (1)后退一步,满足跳2步,然后加上跳到本次的位置步数 dp[5]=dp[4]+1 (dp[i] = dp[i-1]+1)
    (2) 前进一步,满足跳2步, 然后回退到/2的位置,在前进一步 dp[5]=(dp[(5+1)/2]+1)+1=dp[3]+2 (dp[i]=dp[(i+1)/2]+1) + 1)

状态转移方程:

当前位置能被二整除,dp[i] = dp[i/2]+1;
当前位置不能被二整除,dp[i] = min(dp[i-1],dp[(i+1)/2]+1) + 1

代码

import java.util.*;
public class Main {public static void main(String[] args){Scanner sc = new Scanner(System.in);int x = sc.nextInt();System.out.println(solve(x));}public static int solve(int x){if(x<2&&x>=0){     return x;}if(x < 0){x = -x;}int[] dp=new int[x+1];dp[0]=0;dp[1]=1;for(int i=2;i<=x;i++){if(i%2==0){dp[i]=dp[i/2]+1;}else{dp[i]=Math.min(dp[i-1], 1 + dp[(i + 1) / 2])+1;}}return dp[x];}}

小招喵跑步(动态规划)相关推荐

  1. 招商银行信用卡中心笔试编程题 - 小招喵跑步

    题目 小招喵跑步 链接:https://www.nowcoder.com/questionTerminal/1177e9bd1b5e4e00bd39ca4ea9e4e216 来源:牛客网 小招喵喜欢在 ...

  2. 【牛客CMB2 小招喵跑步】

    牛客CMB2 小招喵跑步 题目 解题思路 代码实例 运行代码 题目 小招喵喜欢在数轴上跑来跑去,假设它现在站在点n处,它只会3种走法,分别是: 1.数轴上向前走一步,即n=n+1 2.数轴上向后走一步 ...

  3. 「SCOI2015」小凸想跑步 解题报告

    「SCOI2015」小凸想跑步 最开始以为和多边形的重心有关,后来发现多边形的重心没啥好玩的性质 实际上你把面积小于的不等式列出来,发现是一次的,那么就可以半平面交了 Code: #include & ...

  4. Python_封装案例(小明爱跑步)

    1.封装的特性和需求分析 封装是面向对象编程的一大特性, 我们在使用面向对象开发程序的时候, 第一步就应该现在需求分析, 然后根据明确的职责把不同的属性和方法封装到一个又一个抽象的类中, 之所以说是抽 ...

  5. Python中面向对象封装案例——小明爱跑步、摆放家具

    文章目录 面向对象封装案例 目标 1. 封装 2. 小明爱跑步 2.1 小明爱跑步扩展 -- 小美也爱跑步 3. 摆放家具 3.1 创建家具 3.2 创建房间 3.3 添加家具 3.4 小结 面向对象 ...

  6. python入门笔记——面向对象基础1_5(小明爱跑步案例)

    案例: 小明爱跑步:实际项目需求如下 ①小明体重 75.0 公斤 ②小明每次跑步 会减少0.5公斤 ③小明每次吃东西 会增加 1公斤 1.案例分析: 名字提炼法,小明--人类: 属性--体重 动词提炼 ...

  7. 保护个人隐私视频文件加密方法两小招

    保护个人隐私视频文件加密方法两小招 前段时间网络上沸沸扬扬的艳照门事件,让那些平日里光鲜照人的大明星在老百姓心中的形象一落千丈,这里面就涉及到很多个人隐私文件如何保密的问题,自己存在电脑你的视频文件如 ...

  8. android手机避免不必要的流量,老生常谈 如何防止手机流量偷跑六小招

    原标题:老生常谈 如何防止手机流量偷跑六小招 最近手机流量偷跑问题又被拿到了桌面上,相信很多小伙伴也发生这种情况,都没怎么上网,怎么流量就少了这么多呢?安装到手机中的部分软件,可能会由于实时数据的更新 ...

  9. ITPUB老帖子:小招技巧3: EXCEL文件导入数据库

    小招技巧3: EXCEL文件导入数据库 (发贴日期:2003.03.11) EXCEL文件导入数据库的简便方法 嗨! 这个问题你可能有很多好方法. 不过多学一种不是坏事. 你用的方法可能是: 1. 存 ...

  10. 5793. 【NOIP2008模拟】小S练跑步

    Description        小S是一个爱锻炼的孩子,他在放假期间坚持在A公园练习跑步.       但不久后,他就开始为在重复的地点练习感到厌烦了,他就打算去B公园跑步.       但是小 ...

最新文章

  1. 如何将Git存储库克隆到特定文件夹?
  2. 程序员的自我修养学习笔记——第五章
  3. 最大公约数+最小公倍数
  4. BUUCTF-WEB:[HCTF 2018]WarmUp
  5. Qt Quick的国际化和本地化
  6. C++中参数传递的两种方式:传值与传址及它们的区别
  7. C#操作数据库(一)【连接SQL Server数据库】
  8. js压缩图片_Web 性能优化: 图片优化让网站大小减少 62%
  9. vscodehtml环境配置_从零开始配置 vscode
  10. 如何用编程方式实现创建一个页面并替换掉站点首页
  11. matlab 自带定积分,Matlab怎么计算定积分,划重点了
  12. 基于Python构建土地利用转移矩阵及完成Markov预测
  13. 毫米波雷达及其应用精炼介绍
  14. 电商系统开发之产品订单分拆设计技术思路
  15. 拼多多平台API接入文档
  16. 判断输入是否为元音字母
  17. 【JS组件系列】——表格组件神器:bootstrap table(二:父子表和行列调序)
  18. 我的Cocos2d-x学习笔记(十一)触摸、触摸优先级
  19. 企业邮箱的注册申请,个人企业邮箱申请流程!
  20. LINUX 查看宝塔BT登陆账号密码

热门文章

  1. 2008中国成都国际软件设计大赛“优秀选手”名单
  2. 微信小程序-自定义三级联动
  3. 2022.9.13 手机验证码登录功能
  4. 苹果在研发屏下 Face ID 和 Touch ID该技术可能最终不会商用
  5. Android免费离线文字转语言+讯飞语记
  6. 教你免费白嫖各大知名互联网公司的「文字转语音、语音转文字」服务!
  7. 人大与加拿大女王大学金融硕士在短学制中成就别样的人生
  8. 网站盈利模式分析总结
  9. ANSI/ISO C++ Professional Programmer's Handbook(7)
  10. 小米怎么快速回到顶部_拆解报告:小米小爱鼠标采用炬芯ATB110X蓝牙物联网方案 -...