剑指offer No.67 剪绳子
2020-07-21 04:05
901 查看
题目描述
给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
输入描述:
[code]输入一个数n,意义见题面。(2 <= n <= 60)
输出描述:
[code]输出答案。
示例1
输入
[code]8
输出
[code]18
解法一:
使用动态规划解决
动态规划,先自上而下分析,在长度为n的绳子所求为f(n),剪下一刀后剩下的两段长度是i和n-i,在这个上面还可能继续减(子问题),所以:
f(n)=max(f(i)×f(n−i))
然后自下而上的解决问题,可以从f(1)开始向上计算并打表保存,最终获得f(n)的值。
1、C++
[code]class Solution { public: int cutRope(int number) { if(number < 2)//因为要求长度n>1,所以这里返回0表示输入非法 return 0; if(number == 2)//长度为2时,因为要求剪下段数m>1,所以最大是1x1=1 return 1; if(number == 3)//长度为3时,因为要求剪下段数m>1,所以
相关文章推荐
- 剑指offer-剪绳子
- 剑指Offer-14:剪绳子
- 剑指offer----015(剪绳子)
- 【剑指offer】剪绳子 -- Python 实现
- 剑指offer-剪绳子(C++ 动态规划)
- 【Golang】LeetCode-剑指Offer-面试题14- I-剪绳子【两种写法】
- 剑指offer--面试题14:剪绳子
- 剑指 offer第14题-剪绳子
- 剑指offer--剪绳子
- 剑指Offer面试题14:剪绳子 Java代码实现
- 【剑指offer】第十四题(剪绳子) 和 第十五题(二进制中的数)
- [剑指Offer] 14_剪绳子
- 剑指offer-动态规划-剪绳子问题分析
- 剑指offer 剪绳子
- java 剪绳子 剑指offer
- 剑指Offer 面试题14 剪绳子
- 【剑指offer】面试题14:剪绳子
- 剑指Offer :面试题13 在O(1)时间删除链表节点
- 矩形覆盖[剑指offer]之python实现
- 剑指offer-替换空格(java语言)