剪绳子(1)

题目描述
给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
输入描述:
输入一个数n,意义见题面。(2 <= n <= 60)
输出描述:
返回值
示例:
输入: 8
输出:18
分析思路一:
这个思路是评论里看的比较简洁的版本,但是自己很难想到,所以后期整理的时候,十分的。。。怀疑自己。所以后面会整理个正常的动态规划版本。
1:首先是一个问题,当确定一个绳子周长的时候,怎样使得长方形的面积最大。
图片说明
通过计算,当定长时候,截得长度相等时候,乘积最大。
下面这句话不太懂:
(通用性待数学求证)
基本不等式的定理可知:算术平均数 > 几何平均数
2:回归本题得计算,题目绳子长度为n,分成m段,每段为x,则m=n/x;
图片说明
特殊值带入可以得到f3>f2;
得到每段为3时,乘积最大。

class Solution {
public:

    int cutRope(int number) {
        if(number<1) return 0;
        if(number==1||number==2) return 1;
        if(number==3) return 2;
        int w = number%3;
        switch(w){
            case 0 :
                return (int) pow(3,number/3);
            case 1:
                return (int) pow(3,number/3 -1)*4;
            case 2:
                return (int) pow(3,number/3)*2;
        }
        return 0;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
09-30 19:49
起名星人:蛮离谱的,直接要求转投销售
投递汇川技术等公司10个岗位
点赞 评论 收藏
分享
jack_miller:杜:你不用我那你就用我的美赞臣
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务