算法题 - 数字游戏问题 - Python
问题分析:
给定两个正数 m
,n
(0<=m<=n
),现在求,从 m
开始,只能 加1
,或者乘以2
最后得到n
的最小操作次数
。
问题分析:
很显然是一个动态规划题目,首先考虑一个 m=1
的情况,不难得出 dp方程
:
dp[1] = 0
n为偶数: dp[n] = min(dp[n-1]+1, dp[n/2]+1)
n为奇数: dp[n] = min(dp[n-1]+1, dp[(n-1)/2]+2) # dp[(n-1)/2]+2 先乘再加
dp[n]
表示从 1
到 n
最小操作次数。
那么,现在把 m
的值推广一下,其实思路和上面完全一样,但要注意两点:
(1)第一个值要初始化为 0
;
(2)在回头判断 dp[n/2]
, dp[(n-1)/2]
时,要注意数组算法越界,如果越界了很显然,只能做 +1
操作;
Python3实现:
# @Time :2018/08/23
# @Author :LiuYinxingclass Solution:def Solve(self, m, n):if m == n: return 0if abs(m-n) == 1: return 1if n < m: m, n = n, m # 保持 m 是小的dp = [0] * (n-m+1)dp[1] = 1for i in range(2, (n-m+1)):if (i + m) % 2 == 0: # 偶数的情况if (i + m) // 2 < m: # 判断是否出界dp[i] = dp[i - 1] + 1else:dp[i] = min(dp[i - 1] + 1, dp[(i+m) // 2 - m] + 1)else: # 奇数的情况if (i + m - 1) // 2 < m:dp[i] = dp[i - 1] + 1else:dp[i] = min(dp[i - 1] + 1, dp[(i + m - 1) // 2 - m] + 2) # dp[(n-1)/2]+2print(dp)return dp[-1]if __name__ == '__main__':solu = Solution()print(solu.Solve(7, 9))
声明:总结学习,有问题可以批评指正,大神可以略过哦。
算法题 - 数字游戏问题 - Python相关推荐
- 蓝桥杯算法训练 数字游戏 组合数和暴力两种解法
试题 算法训练 数字游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列 ...
- Java实现 蓝桥杯 算法训练 数字游戏
试题 算法训练 数字游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列 ...
- 蓝桥杯 算法训练 数字游戏
算法训练 数字游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列都比上 ...
- python猜数字游戏简单-python猜数字游戏快速求解解决方案
python猜数字游戏快速求解解决方案.使用方法: 1. 保存代码为guessall.py 2. 执行python guessall.py > result.txt 3. 打开result.tx ...
- 数组——洛谷#P1427 小鱼的数字游戏(Python实现)
题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字(长度不一定,以0结束,最多不超过100个,数字不超过2^32-1),记住了然后反着念出来(表示结束的数字0就不要念出来了).这对小鱼的 ...
- [编程题] 数字游戏
小易邀请你玩一个数字游戏,小易给你一系列的整数.你们俩使用这些整数玩游戏.每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字. 例如: 如果{2,1,2 ...
- 2023华为od机试真题【数字游戏】Python【100%通过率】
所有题目均有五种语言实现.C实现目录.C++ 实现目录.Python实现目录.Java实现目录.JavaScript实现目录 题目 小明玩一个游戏.系统发1+n张牌,每张牌上有一个整 ...
- leetcode算法题--石子游戏 II★★
原题链接:https://leetcode-cn.com/problems/stone-game-ii/ 相关题目:石子游戏 动态规划: dp[i][j]表示在i~n-1堆石子中,最多拿前2*j堆时先 ...
- 笔试算法题及解答(Python)
1.给定任意一个正整数,求比这个数大且最小的"不重复数","不重复数"的含义是相邻两位不相同,例如1101是重复数,而1201是不重复数 1 # coding: ...
最新文章
- CodeForces - 1484F Useful Edges(最短路)
- LeetCode 541. 反转字符串 II
- Oracle Merge Into 的用法详解实例
- 【华为云技术分享】【测试微课堂】DevOps敏捷测试之道
- Java基础学习总结(135)——Java代码性能优化实践经验再总结
- vba遍历字符串_EXCEL 公式 遍历查找 查找字符串
- Ionic Cordova实现软键盘的监听 以及操作大全
- 经典排序算法(二十)--Strand Sort
- 看我如何解决tomcat控制台内容输出乱码的问题?
- win10系统打开tftp服务器,win10设置tftp服务器配置
- win7计算机电脑屏幕亮度,电脑屏幕亮度怎么调win7雨林木风系统
- 区块链-超级账本Hyperledger-fabric初步认识
- matlab弦截法例子,弦截法matlab程序
- 周日报名截止,翼支付杯大数据建模大赛16万大奖邀你来!!
- matlab验证角谷猜想问题,角谷猜想1.5编程基础之循环控制21
- FX5u控制4个伺服,一个完整的项目 程序用 标签分层,说明了定位控制中的公共参数设定、回原点、
- @Valid使用详解
- 虚拟机配置windows7+office2010
- 一文搞定pandas的数据合并
- Unity发布小游戏(六):小游戏的运行与测试
热门文章
- oracle当天八点,oracle实现动态查询前一天早八点到当天早八点的数据功能示例
- Android jni curl返回CURLE_COULDNT_RESOLVE_HOST问题
- 说大数据杀熟,这锅可不背!
- 汇通达再度冲刺港交所上市:整体毛利率低下,已有股东提前退出
- 瑞星播报:6日需警惕“IRC波特变种XAG”病毒
- 回溯问题一:地图涂色,四色定理证明
- 【附源码】Python计算机毕业设计企业物资管理系统
- php代码加固,织梦模板加固版教程详解
- 华为起诉最新进展,国内航司暂停运行有关客机,收买家庭不得继续抚养被解救儿童,脸书创始人后悔没早学微信,这就是今天的大新闻...
- 为什么苹果电脑qq无法远程连接服务器,qq远程控制连接不上怎么回事(图示其原因和解决方案)...