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获取指定网页上所有超链接的方法
Apr 04 Python
用Python抢过年的火车票附源码
Dec 07 Python
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
Python实现的归并排序算法示例
Nov 21 Python
Python文件常见操作实例分析【读写、遍历】
Dec 10 Python
在scrapy中使用phantomJS实现异步爬取的方法
Dec 17 Python
python实现ip地址查询经纬度定位详解
Aug 30 Python
Python 实现国产SM3加密算法的示例代码
Sep 21 Python
Python非单向递归函数如何返回全部结果
Dec 18 Python
CocosCreator ScrollView优化系列之分帧加载
Apr 14 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 select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
Laravel框架中集成MongoDB和使用详解
2019/10/17 PHP
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
大四学生毕业自荐信
2013/11/07 职场文书
我未来的职业规划范文
2014/01/11 职场文书
新闻学专业个人求职信写作
2014/02/04 职场文书
党员干部2014全国两会学习心得体会
2014/03/10 职场文书
电力安全事故反思
2014/04/27 职场文书
投资建议书模板
2014/05/12 职场文书
学校端午节活动方案
2014/08/23 职场文书
普通党员四风问题对照检查材料
2014/09/27 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
博士导师推荐信
2015/03/25 职场文书