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的组合模式与责任链模式编程示例
Feb 02 Python
详解python发送各类邮件的主要方法
Dec 22 Python
利用Hyperic调用Python实现进程守护
Jan 02 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
Pycharm 操作Django Model的简单运用方法
May 23 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
Python3中关于cookie的创建与保存
Oct 21 Python
numpy.random模块用法总结
May 27 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
python pptx复制指定页的ppt教程
Feb 14 Python
django orm模块中的 is_delete用法
May 20 Python
健身房被搭讪?用python写了个小米计时器助人为乐
Jun 08 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函数的常用方法及注意之处小结
2011/07/10 PHP
jQuery中delegate()方法用法实例
2015/01/19 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
python多进程并发demo实例解析
2019/12/13 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
python高级特性简介
2020/08/13 Python
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
某公司.Net方向面试题
2014/04/24 面试题
如何安装ruby on rails
2014/02/09 面试题
产品质量承诺书范文
2014/03/27 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
社区党员公开承诺书
2014/08/30 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
员工工作及收入证明
2014/10/28 职场文书
预备党员转正意见
2015/06/01 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle
压缩Redis里的字符串大对象操作
2021/06/23 Redis
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技