剪绳子

作者: Crazy_Bear | 来源:发表于2020-07-24 10:36 被阅读0次
    • 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
    • 贪心算法
      • rec[i]:长度为i时可得到的最大乘积
      • 由于是相乘,所以rec[1,2,3]为1,2,3
    • Java代码
    public class Solution {
        public int cutRope(int target) {
            if (target <2) return 0;
            if (target == 2) return 1;
            if (target == 3) return 2;
            int[] rec = new int[target+1];
            rec[0] = 0;
            rec[1] = 1;
            rec[2] = 2;
            rec[3] = 3;
            for(int i = 4; i <= target; i++) {
                int max = 0;
                for(int j = 1; j<=i/2; j++) {
                    max = Math.max(rec[j]*rec[i-j], max);
                }
                rec[i] = max;
            }
            return rec[target];
        }
    }
    
    • C++ 代码
    class Solution {
    public:
        int cutRope(int number) {
            if(number<2) return 0;
            if(number == 2) return 1;
            if(number == 3) return 2;
            vector<int> rec(number+1, 0);
            rec[0] = 0;
            rec[1] = 1;
            rec[2] = 2;
            rec[3] = 3;
            for(int i = 4;i<=number; i++){
                int _max = 0;
                for(int j = 1; j<=i/2;j++)
                {
                    if(rec[j]*rec[i-j]>_max)
                        _max = rec[j]*rec[i-j];
                }
                rec[i] = _max;
            }
            return rec[number];
        }
    };
    

    相关文章

      网友评论

          本文标题:剪绳子

          本文链接:https://www.haomeiwen.com/subject/qvfjlktx.html