剑指offer 48. 剪绳子

  1. 题目:给你一根长度为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。
  2. 思路:
    1. 这是一个动态规划的题目,对于长度是i的绳子,剪成的m段,有一段长度1,2,3,4……i-1,每段长度*剩下长度的最大乘积为该种情况的最大乘积,所有情况里面求出最大乘积即为该长度为i的绳子可以剪成m段的最大乘积。
  3. 启发或者坑:
    1. 动态规划的初始化
  4. 代码:
    class Solution {
    public:
        int cutRope(int number) {
            if (number < 2)
                return 0;
            if (number == 2)
                return 1;
            if (number == 3)
                return 2;
             
            vector<int> result;
            result.push_back(0);
            result.push_back(1);
            result.push_back(2);
            result.push_back(3);
            for (int i =4; i <= number; i++) {
                int maxV = 0;
                for (int j = 1; j <i; j++) {
                    int temp = j * result[i-j];
                    if (temp > maxV)
                        maxV = temp;
                }
                result.push_back(maxV);
            }
            return result[number];
        }
    };
    
发布了131 篇原创文章 · 获赞 5 · 访问量 7378

猜你喜欢

转载自blog.csdn.net/Alexia23/article/details/104093271