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的urllib库提交WEB表单
Feb 24 Python
使用python实现正则匹配检索远端FTP目录下的文件
Mar 25 Python
Python3里的super()和__class__使用介绍
Apr 23 Python
讲解Python中运算符使用时的优先级
May 14 Python
python 实现红包随机生成算法的简单实例
Jan 04 Python
Python建立Map写Excel表实例解析
Jan 17 Python
Flask框架Jinjia模板常用语法总结
Jul 19 Python
Python Pexpect库的简单使用方法
Jan 29 Python
详解Python循环作用域与闭包
Mar 21 Python
PyTorch的Optimizer训练工具的实现
Aug 18 Python
python二分法查找算法实现方法【递归与非递归】
Dec 06 Python
opencv3/C++ 平面对象识别&amp;透视变换方式
Dec 11 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时间计算相关问题小结
2016/05/09 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
循环 vs 递归浅谈
2013/02/28 Javascript
JavaScript定义变量和变量优先级问题探讨
2014/10/11 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
2018/12/06 NodeJs
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
python中合并两个文本文件并按照姓名首字母排序的例子
2014/04/25 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
Mac 上切换Python多版本
2017/06/17 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
Python中的面向接口编程示例详解
2021/01/17 Python
教师找工作推荐信
2013/11/23 职场文书
入学生会自荐书范文
2014/02/05 职场文书
绘画专业自荐信范文
2014/02/23 职场文书
大学理论知识学习自我鉴定
2014/04/28 职场文书
明星邀请函
2015/02/02 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python
Python音乐爬虫完美绕过反爬
2021/08/30 Python
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫