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的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
python 实现视频流下载保存MP4的方法
Jan 09 Python
python读取txt文件并取其某一列数据的示例
Feb 19 Python
Flask-WTF表单的使用方法
Jul 12 Python
python实现图片中文字分割效果
Jul 22 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
Python实现socket非阻塞通讯功能示例
Nov 06 Python
Python 使用threading+Queue实现线程池示例
Dec 21 Python
python opencv 实现读取、显示、写入图像的方法
Jun 08 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 30 Python
详解OpenCV曝光融合
Apr 29 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
PHPShop存在多个安全漏洞
2006/10/09 PHP
PHP 获取目录下的图片并随机显示的代码
2009/12/28 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
ThinkPHP安装和设置
2015/07/27 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
微信小程序实现留言板
2018/10/31 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
Python协程的用法和例子详解
2017/09/09 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
python求前n个阶乘的和实例
2020/04/02 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
HTML5新标签兼容——&gt; 的两种方法
2018/09/12 HTML / CSS
办公室年终个人自我评价
2013/10/28 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript