剪绳子

作者 : 开心源码 本文共623个字,预计阅读时间需要2分钟 发布时间: 2022-05-13 共276人阅读

题目形容

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

输入形容:

输入一个数n,意义见题面。(2 <= n <= 60)

输出形容:

输出答案。

示例1

输入
8
输出
18

思路

动态规划。假如绳子长度为6,则可能分成两大段(1,5),(2,4),(3,3)。因为之前已经保存了绳子长度为1,2,3,4,5时绳子切割的为不同段的最大乘积,所以直接计算绳子切割为不同段后乘积的最大值作为当前长度的绳子切割后最大乘积。

class Solution {public:    int cutRope(int number) {        if (number <= 1) {            return 0;        }        if (number == 2) {            return 1;        }        if (number == 3) {            return 2;        }        vector<int>result(number + 1);        result[1] = 1;        result[2] = 2;        result[3] = 3;        for (int i = 4; i <=number; i++)        {            int tmp = 0;            for (int j = 0; j <= number / 2; j++)            {                tmp = max(result[j] * result[i - j], tmp);            }            result[i] = tmp;        }        return result[number];    }};
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 剪绳子

发表回复