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中使用pprint函数进行格式化输出的教程
Apr 07 Python
详解Python中的Descriptor描述符类
Jun 14 Python
Python编程实现粒子群算法(PSO)详解
Nov 13 Python
Python 数据库操作 SQLAlchemy的示例代码
Feb 18 Python
关于pytorch多GPU训练实例与性能对比分析
Aug 19 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
Feb 11 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
Nov 20 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
Python中的嵌套循环详情
Mar 23 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
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
vue .sync修饰符的使用详解
2018/06/15 Javascript
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
python 全局变量的import机制介绍
2017/09/07 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
Python zip()函数用法实例分析
2018/03/17 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
自考自我鉴定范文
2013/10/30 职场文书
博士研究生自我鉴定范文
2013/12/04 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
办公室主任岗位职责
2015/01/31 职场文书
商务代表岗位职责
2015/02/15 职场文书
升职自我推荐信范文
2015/03/25 职场文书
教师旷工检讨书
2015/08/15 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP