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中的__slots__使用示例
Feb 26 Python
浅析Python中的序列化存储的方法
Apr 28 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
May 03 Python
python如何去除字符串中不想要的字符
Jul 05 Python
python3利用tcp实现文件夹远程传输
Jul 28 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
Dec 25 Python
使用Tensorflow将自己的数据分割成batch训练实例
Jan 20 Python
Pycharm和Idea支持的vim插件的方法
Feb 21 Python
Python-jenkins 获取job构建信息方式
May 12 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 Python
python中判断数字是否为质数的实例讲解
Dec 06 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遍历数组的方法分享
2012/03/22 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
JavaScript中的null和undefined解析
2012/04/14 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
简单谈谈关于Angular Cli打包的事
2017/09/05 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
Python使用当前时间、随机数产生一个唯一数字的方法
2017/09/18 Python
flask入门之表单的实现
2018/07/18 Python
Python2与Python3的区别实例总结
2019/04/17 Python
六行python代码的爱心曲线详解
2019/05/17 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
中学老师的自我评价
2013/11/07 职场文书
2013年军训通讯稿
2014/02/05 职场文书
总经理检讨书
2014/09/15 职场文书
工作自我推荐信范文
2015/03/25 职场文书
MySQL通过binlog恢复数据
2021/05/27 MySQL
Nginx利用Logrotate实现日志分割
2022/05/20 Servers
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python