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 Django做网页
Nov 04 Python
Python写的一个简单DNS服务器实例
Jun 04 Python
跟老齐学Python之通过Python连接数据库
Oct 28 Python
在Python程序中进行文件读取和写入操作的教程
Apr 28 Python
python flask中静态文件的管理方法
Mar 20 Python
Python基础学习之时间转换函数用法详解
Jun 18 Python
解决python有时候import不了当前的包问题
Aug 28 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
如何基于python生成list的所有的子集
Nov 11 Python
PyQt5事件处理之定时在控件上显示信息的代码
Mar 25 Python
Python QTimer实现多线程及QSS应用过程解析
Jul 11 Python
Python切片列表字符串如何实现切换
Aug 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的ZipArchive类用法实例
2014/10/20 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
js chrome浏览器判断代码
2010/03/28 Javascript
ExtJS 入门
2010/10/29 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
npm qs模块使用详解
2020/02/07 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
python Pygame的具体使用讲解
2017/11/03 Python
python实现发送邮件功能代码
2017/12/14 Python
浅析Python四种数据类型
2018/09/26 Python
Python queue队列原理与应用案例分析
2019/09/27 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
PyTorch的torch.cat用法
2020/06/28 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
高中数学教师求职信
2013/10/30 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
银行实习推荐信
2015/03/27 职场文书
费城故事观后感
2015/06/10 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP
spring boot中nativeQuery的用法
2021/07/26 Java/Android
全网非常详细的pytest配置文件
2022/07/15 Python