剪绳子(剪绳子)

题目描述
给你一根长度为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)
返回值描述:
输出答案。
示例1
输入
复制
8
返回值
复制
18
动态规划:dp[n][m]=max:dp[n-x][m-1] :n长的绳子分为m段

class Solution {
public:
    int cutRope(int number) {
        int dp[70][70],ans=0;
        for(int i=1;i<=number;i++)
            dp[i][1]=i,dp[i][i]=1;
        for(int i=1;i<=number;i++)
        {
            for(int j=1;j<=i;j++)
            {
                for(int x=1;x<i;x++)
                    dp[i][j]=max(dp[i][j],dp[i-x][j-1]*x);
            }
        }
        
        for(int i=1;i<=number;i++)
            ans=max(ans,dp[number][i]);
        return ans;
    }
};
上一篇:LeetCode算法题目之70.爬楼梯


下一篇:对话机器人70年:科幻与现实的交融