zoukankan      html  css  js  c++  java
  • 剪绳子

    题目描述

    给你一根长度为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。

    输入描述:

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

    输出描述:

    输出答案。
    示例1

    输入

    复制
    8

    输出

    复制
    18

    思路:可以知道2的话,此时应输出1,3的话应输出2。其他的值都能分解,比如8,可以分解为2+6和3+5,可以再分割如下:
    2+6=2+2+4或2+3+3
    2+2+4还可以分解为2+2+2+2.
    3+5=3+2+3
    可以看到,当分解到3和2时,就不需要再向下分解了。代码如下:
    class Solution {
    public:
        int cutRope(int number) {
            if(number<=2)
                return 1;
            if(number==3)
                return 2;
            int max=number;
            for(int i=0;i<=1;i++)
            {
                int temp=(i+2)*(number-i-2);
                if(temp>max)
                    max=temp;
                if(max<(cutRope(i+2)*cutRope(number-i-2)) )
                {
                    max=cutRope(i+2)*cutRope(number-i-2);
                }
            }
            return max;
        }
    };
  • 相关阅读:
    洛谷P2875 [USACO07FEB]牛的词汇The Cow Lexicon
    poj2241 The Tower of Babylon
    2015 Noip提高组 Day2
    2015 Noip提高组 Day1
    poj3252 Round Numbers
    hdu4734 F(x)
    hdu2089 不要62
    洛谷P1831 杠杆数
    洛谷P2113 看球泡妹子
    洛谷P3110 [USACO14DEC]驮运Piggy Back
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/12153397.html
Copyright © 2011-2022 走看看