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 相关文章推荐
Python3.x和Python2.x的区别介绍
Feb 12 Python
python实现带声音的摩斯码翻译实现方法
May 20 Python
python开发之函数定义实例分析
Nov 12 Python
python读取与写入csv格式文件的示例代码
Dec 16 Python
解决python使用open打开文件中文乱码的问题
Dec 29 Python
python中scikit-learn机器代码实例
Aug 05 Python
python中的json总结
Oct 11 Python
django框架模板语言使用方法详解
Jul 18 Python
python实现小程序推送页面收录脚本
Apr 20 Python
Keras load_model 导入错误的解决方式
Jun 09 Python
Scrapy模拟登录赶集网的实现代码
Jul 07 Python
Python如何解除一个装饰器
Aug 07 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批量采集下载美女图片的实现代码
2013/06/03 PHP
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
使用console进行性能测试
2015/04/27 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
进一步了解Python中的XML 工具
2015/04/13 Python
简介Django中内置的一些中间件
2015/07/24 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
Python中你应该知道的一些内置函数
2017/03/31 Python
Python 和 JS 有哪些相同之处
2017/11/23 Python
怎么使用pipenv管理你的python项目
2018/03/12 Python
Python交互环境下实现输入代码
2018/06/22 Python
python3 下载网络图片代码实例
2019/08/27 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
快餐店的创业计划书范文
2014/01/29 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
Nginx 匹配方式
2022/05/15 Servers