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基础教程之常用运算符
Aug 29 Python
使用Python的Django框架实现事务交易管理的教程
Apr 20 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 Python
python僵尸进程产生的原因
Jul 21 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
Python中浅拷贝copy与深拷贝deepcopy的简单理解
Oct 26 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
python的继承知识点总结
Dec 10 Python
python随机生成库faker库api实例详解
Nov 28 Python
python Tensor和Array对比分析
Jan 08 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
Python 改变数组类型为uint8的实现
Apr 09 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断点续传之如何分割合并文件
2014/03/22 PHP
php验证session无效的解决方法
2014/11/04 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
2016/12/19 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
js 格式化时间日期函数小结
2010/03/20 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
Python常用爬虫代码总结方便查询
2019/02/25 Python
Python调用.net动态库实现过程解析
2020/06/05 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
pandas处理csv文件的方法步骤
2020/10/16 Python
html5 视频播放解决方案
2016/11/06 HTML / CSS
英国航空官网:British Airways
2016/09/11 全球购物
企业门卫岗位职责
2013/12/12 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
2014年人大工作总结
2014/12/10 职场文书
如何书写授权委托书?
2019/06/25 职场文书
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python