Python 剪绳子的多种思路实现(动态规划和贪心)


Posted in Python onFebruary 24, 2020

剑指Offer(Python多种思路实现):剪绳子

面试14题:

题目:剪绳子

题:给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数,且n>1,m>1),每段绳子的长度记为k[0],k[1],k[2],...,k[m]。请问k[0]*k[1]*...*k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积为18。

解题思路一:基于动态规划和贪婪算法。

class Solution:
 def MaxProductAfterCut(self, n):
  # 动态规划
  if n<2:
   return 0
  if n==2:
   return 1
  if n==3:
   return 2
  products=[0]*(n+1)
  products[0]=0
  products[1]=1
  products[2]=2
  products[3]=3
 
  for i in range(4,n+1):
   max=0
   for j in range(1,i//2+1):
    product=products[j]*products[i-j]
    if product>max:
     max=product
   products[i]=max
  #print(products)
  return products[n]
 
 def MaxProductAfterCut2(self, n):
  # 贪婪算法
  if n < 2:
   return 0
  if n==2:
   return 1
  if n==3:
   return 2
  timesOf3 = n//3
  if n - timesOf3*3 == 1:
   timesOf3 -= 1
  
  timesOf2 = (n - timesOf3 * 3)//2
  return (3**timesOf3) * (2**timesOf2)
 
 
 
if __name__=="__main__":
 print(Solution().MaxProductAfterCut(8))
 print(Solution().MaxProductAfterCut(10))
 #print(Solution().NumberOf1(0))
 print(Solution().MaxProductAfterCut2(8))
 print(Solution().MaxProductAfterCut2(10))

解题思路二:基于动态规划和贪婪算法。

class Solution:
 # 动态规划
 def maxCut(self, n):
  if n<2:  return 0
  if n==2: return 1
  if n==3: return 2
  res=[0]*(n+1)
  res[0], res[1], res[2], res[3]=0, 1, 2, 3
  for i in range(4, n+1):
   max = 0
   for j in range(1, i//2+1):
    temp = res[j]*res[i-j]
    if temp>max:
     max = temp
   res[i]=max # 由下而上
  return res[n]
 # 贪婪算法
 def cutRope(length):
  if length<2: return 0
  if length==2: return 1
  if length==3: return 2
  timesOf3 = length // 3 # 尽可能剪出3
  if length-timesOf3*3 == 1: # 如果最后余1,则留一段4分成两半
   timesOf3 -= 1
  timesOf2 = (length-timesOf3*3) // 2
  return (3**timesOf3) * (2**timesOf2)

到此这篇关于Python 剪绳子的多种思路实现(动态规划和贪心)的文章就介绍到这了,更多相关Python 剪绳子内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python求pi的方法
Oct 08 Python
Python中urllib2模块的8个使用细节分享
Jan 01 Python
Python实现将DOC文档转换为PDF的方法
Jul 25 Python
python使用PyCharm进行远程开发和调试
Nov 02 Python
python测试mysql写入性能完整实例
Jan 18 Python
python实现pdf转换成word/txt纯文本文件
Jun 07 Python
python3 实现验证码图片切割的方法
Dec 07 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
Python使用POP3和SMTP协议收发邮件的示例代码
Apr 16 Python
python识别文字(基于tesseract)代码实例
Aug 24 Python
pytorch中的transforms模块实例详解
Dec 31 Python
Python线程threading模块用法详解
Feb 26 Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 #Python
关于多元线性回归分析——Python&amp;SPSS
Feb 24 #Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 #Python
sklearn+python:线性回归案例
Feb 24 #Python
深入理解Tensorflow中的masking和padding
Feb 24 #Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 #Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
Feb 24 #Python
You might like
php中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
PHP中FTP相关函数小结
2016/07/15 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
js模拟实现Array的sort方法
2007/12/11 Javascript
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
javascript复制粘贴与clipboardData的使用
2014/10/16 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
python实现web方式logview的方法
2015/08/10 Python
python中的编码知识整理汇总
2016/01/26 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
Python面向对象编程基础实例分析
2020/01/17 Python
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
个人简历中自我评价
2014/02/11 职场文书
高级编程求职信模板
2014/02/16 职场文书
2014年保洁工作总结
2014/11/24 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
nginx共享内存的机制详解
2022/03/21 Servers