首页 > 试题广场 >

剪绳子(进阶版)

[编程题]剪绳子(进阶版)
  • 热度指数:26397 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给你一根长度为 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 。

由于答案过大,请对 998244353 取模。

数据范围:
进阶:空间复杂度 O(1) , 时间复杂度 O(logn)

示例1

输入

4

输出

4

说明

拆分成 2 个长度为 2 的绳子,2 * 2 = 4 
示例2

输入

5

输出

6

说明

剪成一个长度为 2 的绳子和一个长度为 3 的绳子,答案为2*3=6 
示例3

输入

874520

输出

908070737
头像 牛客题解官
发表于 2022-04-25 19:16:10
精华题解 题目的主要信息: 把一根长度为nnn的绳子分成mmm段,每段长度都是整数 求每段长度乘积的最大值 由于答案过大,请对 998244353 取模 举一反三: 学习完本题的思路你可以解决如下题目: JZ14. 剪绳子 方法:快速幂+快速乘法(推荐使用) 知识点1:贪心思想 贪心思想属于动态规划思想中 展开全文
头像 摸鱼学大师
发表于 2021-12-04 13:10:06
题目的主要信息: 把一根长度为nnn的绳子分成mmm段,每段长度都是整数 求每段长度乘积的最大值 由于答案过大,请对 998244353 取模 进阶要求:空间复杂度:O(1)O(1)O(1), 时间复杂度:O(log2n)O(log_2n)O(log2​n) 数学推算 根据均值不等式,有:n1+ 展开全文
头像 卡2
发表于 2021-12-02 10:09:37
3个数越多答案越大,所以n%3有三种情况: 余数为0直接做3^(n/3) 余数为1做4*3^((n-4)/3) 余数为2做2*3^((n-2)/3) 代码技巧部分:因为指数会很大如果用Math的函数效率低,这种情况可以用快速幂去做,比如a^n次方要n次的相乘,快速幂只需要logn次 import 展开全文
头像 tonyjxc
发表于 2022-01-26 11:32:42
就是要重写pow函数 不然复杂度太大 有两点:一个是求次方的时候遇到偶数可以拆开来;另一个是可以提前做模运算 证明如图: 1.求模 首先是求模运算的性质。(a*b)%p = [(a%p) * (b%p)] % p 证明: 2.求次方 除了 展开全文
头像 夜渡寒鸦呀
发表于 2022-06-09 09:41:48
C语言求剪绳子(进阶版) 解题思路 对于一段绳子16米 切割方式为 3 3 3 3 2 2,要想乘积足够大,需要优先切割段数3米,其次是2米,不能含有1,这道题就简化成了一个求快速幂的题型。先计算绳子能分多少个3米 多少个2米 然后求快速幂。 递归求快速幂 求 3^7为例,递归为 3*3^6 而3^ 展开全文
头像 秋叶红霜CCCCCC
发表于 2022-11-08 13:04:29
3作指数最好,不明白的看《剪绳子》中等题。 然后使用快速幂,时间复杂度O(logn) 注意大数越界问题。python可以不用考虑。 class Solution:     def cutRope(self, n:& 展开全文
头像 代码界的小白
发表于 2021-12-18 22:29:00
题目主要信息 1、给出一根长度为n的绳子 2、将绳子截成m段,m>2,使得所有乘积最大 方法一:贪心算法 具体方法 本题是JZ14的进阶版,主要的区别在于绳子的长度在JZ14中为小于60,二在本题中为10的14次方,因此JZ14中的动态规划方法在本题中无法使用。 首先,我们可以把这题转化成一道 展开全文
头像 mtgo666
发表于 2022-03-20 15:47:16
思路 这道题和剪绳子题是一模一样的,区别只在于该题数据范围很大。如果使用和剪绳子一样的做法,那么运行会超时。 剪绳子代码 class Solution { public: int cutRope(int number) { if(number==2||number==3) r 展开全文
头像 前端消防圆
发表于 2023-04-13 23:32:46
剪绳子(进阶版):最直观的想法是,快速幂加上快速乘法。剪绳子当每一段长度为3时乘积最大,故使用number对3取余得到res,取商得到num,当res等于0直接返回3的num次方,当res等于1则取一个3凑成4即返回3的num-1次方再乘以4,当res等于2直接返回3的num次方再乘以2。但是由于数 展开全文
头像 反对画饼的小白很豁达
发表于 2021-11-13 21:25:38
长度为n的绳子(n为正整数),截为m段(每段绳子的长度都为正整数),求m段绳子的乘积最大值; 等价于 n=n1+n2+......+nn;求n1n2...nn 的最大值; 对于一个正整数a,若(a−d)×d>a(a-d) \times d>a(a−d)×d>a,d为正整数。 则a& 展开全文
头像 牛客159707358号
发表于 2025-03-11 22:07:55
class Solution { public: long long mod = 998244353; //快速乘法 long long fast(long long x, long long y){ long long res = 0; x 展开全文