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中的高级函数map/reduce使用实例
Apr 13 Python
详解Python 数据库 (sqlite3)应用
Dec 07 Python
详谈Python2.6和Python3.0中对除法操作的异同
Apr 28 Python
Python 通过pip安装Django详细介绍
Apr 28 Python
Python SQLite3数据库日期与时间常见函数用法分析
Aug 14 Python
python matlibplot绘制3D图形
Jul 02 Python
python使用tcp实现局域网内文件传输
Mar 20 Python
强悍的Python读取大文件的解决方案
Feb 16 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
Python filter()及reduce()函数使用方法解析
Sep 05 Python
Python安装Bs4的多种方法
Nov 28 Python
matplotlib部件之套索Lasso的使用
Feb 24 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 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
2010/08/01 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
禁止js文件缓存的代码
2010/04/09 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
[01:00:04]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第二局
2016/02/26 DOTA
python选择排序算法实例总结
2015/07/01 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
python [:3] 实现提取数组中的数
2019/11/27 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
合作经营协议书范本
2014/04/17 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python