题目

给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m].请问k[0]k[1]…*k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18.

解题思想

动态规划(具体解法及思路见代码注释)

解题代码(python实现)

# 题目一:给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>)每段绳子的长度记为k[],k[],...,k[m].
# 请问k[]*k[]*...*k[m]可能的最大乘积是多少?
# 例如,当绳子的长度为8时,我们把它剪成长度分别为2,,3的三段,此时得到的最大乘积是18. #解题思路:动态规划 def rope_cut(length):
# 最优解数组,当长度为0是为0,当长度为1是为1,当长度为2时为2,当长度大于3时,3就不能切开了,因为3>*,最优解数组为3
li=[,,,]
if length==:#当长度为0时,返回0
return
if length==:#当长度为1时,返回1
return
if length==:#当长度为2时,返回2
return
if length==:#当长度为3时,返回2,虽然最优解数组里为2,但是每次必须得切一刀,这样1*=,所以长度为3时还是2
return
for j in range(,length+):
max =
for i in range(,j):
# 思路:每次求解值时将其他小于需要求解的长度是都列出来放在一个数组里
#如:求长度为5,最优解数组里必须得有长度为1,,,4的最优解值
#注:此处使用列表保存最优解数组是为了性能优化,虽然递归求解也能解出,但会造成大量重复执行
temp=li[i]*li[j-i]
if temp>max:
max=temp
li.append(max)#每次将上次所得最优解追加在列表里
return li[-] print(rope_cut())

(ps:只想说,解出一道题的感觉真的好爽)

最新文章

  1. Ubuntu下安装QQ22013
  2. Django中如何查找模板
  3. css 精灵的用法
  4. Oracle 课程九之绑定变量
  5. Powerdesigner设置name与code不同时变化
  6. python 访问php程序,实现定时
  7. .net概述1
  8. 【转】【可用】Android 登录判断器,登录成功后帮你准确跳转到目标activity
  9. tomcat 发布webService
  10. symfony的安装
  11. 解决getElementsByClassName兼容问题
  12. kvstore存储介质redis代码
  13. Android提高第十九篇之"多方向"抽屉--转
  14. CentOs 系统启动流程相关
  15. 使用FFMPEG进行一些视频处理(C#)视频合并、转码、获取时长
  16. Vue入门2
  17. 基于MySQl的分页显示
  18. How to understand three foundanmental faults?
  19. poj_2406 kmp
  20. centos6.5安装sendmail

热门文章

  1. CodeChef Sereja and Game [DP 概率 博弈论]
  2. 用 label 控制 Pod 的位置 - 每天5分钟玩转 Docker 容器技术(128)
  3. 【视频编解码·学习笔记】7. 熵编码算法:基础知识 & 哈夫曼编码
  4. iOS学习——UIView的研究
  5. mysql 军规 (转载)
  6. css的浮动与定位
  7. JSON工具类
  8. centos 6.* 配置端口
  9. 原生ajax写的上拉加载
  10. JavaScript数据迭代方法差别