首页 > 试题广场 >

剪绳子

[编程题]剪绳子
  • 热度指数:257477 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
给你一根长度为 n 的绳子,请把绳子剪成整数长的 m 段( m 、 n 都是整数, n > 1 并且 m > 1 , m <= n ),每段绳子的长度记为 k[1],...,k[m] 。请问 k[1]*k[2]*...*k[m] 可能的最大乘积是多少?例如,当绳子的长度是 8 时,我们把它剪成长度分别为 2、3、3 的三段,此时得到的最大乘积是 18 。

数据范围:
进阶:空间复杂度 ,时间复杂度

输入描述:
输入一个数n,意义见题面。


输出描述:
输出答案。
示例1

输入

8

输出

18

说明

8 = 2 +3 +3 , 2*3*3=18 
示例2

输入

2

输出

1

说明

m>1,所以切成两段长度是1的绳子    
头像 牛客题解官
发表于 2020-06-02 11:07:48
精华题解 题目的主要信息: 把一根长度为nnn的绳子分成mmm段,每段长度都是整数 求每段长度乘积的最大值 举一反三: 学习完本题的思路你可以解决如下题目: JZ83. 剪绳子(进阶版) JZ71. 跳台阶扩展问题 JZ42. 连续子数组的最大和 方法一:动态规划(推荐使用) 知识点:动态规划 动态规划算 展开全文
头像 数据结构和算法
发表于 2021-07-03 22:19:49
精华题解 数学方式解决 在做这题之前我们先来看这样一个问题,一个整数先把他分成两部分,x+y=n(假设x>=y并且x-y<=1,也就是说x和y非常接近)那么乘积是x*y。然后我们再把这两部分的差放大(x+1)+(y-1)=n(假设x>=y);他们的乘积是(x+1)*(y-1)=x*y-(x- 展开全文
头像 Maokt
发表于 2021-07-01 15:08:02
精华题解 算法思想一:动态规划 解题思路: 1、我们想要求长度为n的绳子剪掉后的最大乘积,可以从前面比n小的绳子转移而来 2、用一个dp数组记录从0到n长度的绳子剪掉后的最大乘积,也就是dp[i]表示长度为i的绳子剪成m段后的最大乘积,初始化dp[2] = 1 3、我们先把绳子剪掉第一段(长度为j 展开全文
头像 Peterliang
发表于 2021-07-14 19:30:27
精华题解 题意分析 题目的意思是给出一个数字,让我们将这个数字进行分解,然后找到分解后所有的数的乘积最大的情况。 样例分析,我们可以将8分解为2x3x3,得到的结果就是18,这个可以自己暴力枚举一下所有的情况进行验证。 思路分析 这个题目,我主要用的是三种方法进行解答 解法一 暴力枚举 我们可以发现 展开全文
头像 leaves0924
发表于 2021-07-03 22:41:19
精华题解 题目描述 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最 展开全文
头像 NumPy
发表于 2021-07-09 08:35:27
精华题解 一、题目描述 JZ67 剪绳子题目描述:给一根长度为n的绳子,请把绳子剪成整数长度的m段(m、n都是整数,m>1),使得每段长度的乘积最大注意审题:m、n都是整数,剪出的绳子长度也是整数,因此不用考虑浮点数的情况,并且m要求大于1,即只要要剪成两段 二、算法1(动态规划) 解题思路 将绳子分 展开全文
头像 牛一霸
发表于 2021-07-03 11:01:08
精华题解 题目:剪绳子 描述:给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三 展开全文
头像 qiaoHaoTing
发表于 2020-03-24 00:29:23
先来一个一般性问题:周长一定为n,这时候长length与宽width在什么情况下,达到面积s最大 s = length * width设length = x则:width = n/2 - x 所以 s = x * (n/2 - x) = -x^2 + n*x/2 求导s' = -2x + 展开全文
头像 Oh~Sunny
发表于 2020-02-13 14:08:55
此题作为面试中经常考到的类型,涉及到我们熟悉的递归,动态规划,贪婪算法这三种,此文会介绍这三种解法. 递归我们先定义函数f(n)为把绳子剪成若干段之后的各段长度乘积的最大值.在剪第一刀的时候,我们会有n-1种可能的选择,也就是说剪出来的第一段绳子的长度可能为1,2,......n-1.因此就有了递 展开全文
头像 SunnyX
发表于 2020-02-21 11:01:43
public class Solution { /** * 解题思路,找出最优解的规律 * 当target等于1,2,3的时候,结果是固定的 * 当target大于3的时候,可以看以下数据 * target=4, 最优解:2 2 * target=5, 展开全文
头像 Dan2
发表于 2019-09-15 16:16:30
递归求解, 简单快速。 public class Solution { public int cutRope(int target) { return cutRope(target, 0); } public int cutRope(int target, in 展开全文
头像 东林林孔仁
发表于 2020-01-29 00:15:17
设绳子长度为n, f(n)为最大乘积,以下讨论默认n > 4 对于长度大于4的绳子,将他剪成更多段,得到的乘积会更大。因为对于n > 4, 如果不切,f(n) = n如果切为两段,长度分别为2和n-2, f(n) = 2n - 4因为 2n - 4 > n 所以任何长 展开全文
头像 常喝水
发表于 2019-12-09 20:31:44
利用动态规划,需要O(n^2)时间和O(n)空间,也就是利用一个表,储存长度为1~n绳子的最大乘积。 class Solution: def cutRope(self, number): # write code here if number < 2: return 0 展开全文
头像 菜鸡N+1号
发表于 2019-12-31 09:55:16
这是一个数学问题。当number > 3时,绳子的长度尽可能为3 class Solution: def cutRope(self, number): if number <= 2: return 1 if number = 展开全文
头像 一叶浮尘
发表于 2020-03-21 23:40:39
刷了这么多天题目,终于刷到剑指offer的最后一道题目了,刷完继续努力在刷200道leetcode的medim题目。 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x. 展开全文
头像 渣渣`
发表于 2019-10-09 17:55:56
import java.util.ArrayList; public class Solution { public int cutRope(int target) { if(target==2){ return 1; } 展开全文
头像 LaN666
发表于 2021-02-03 20:50:17
使用动态规划,dp[i]表示长度为i的绳子的最大乘积 public class Solution { public int cutRope(int target) { /*创建数组并初始化*/ int[] dp = new int[target+1]; 展开全文

问题信息

上传者:小小
难度:
520条回答 68346浏览

热门推荐

通过挑战的用户

查看代码