题目:
class Solution {
public:
int cuttingRope(int n) {
vector<int> dp(n+1); //dp[i]表示长度为i的绳子能得到的最大乘积
dp[0]=0;
dp[1]=0;
dp[2]=1; //长度为0和1的绳子不能剪不了
for(int i=3;i<=n;i++){
for(int j=1;j<=i/2;j++){ //j代表这一次剪出一段长度为j的绳子,最多只要剪到绳长的一半即可。j固定住
dp[i] = max(dp[i], max(j*(i-j), j*dp[i-j])); //分成两段:j*(i-j);分成若干段:一段为j,另外(i-j)分为若干段;针对每一个不同的j(剪掉的长度),dp[i]都会更新一次,所以也要比较
}
}
return dp[n];
}
};
作者:Gnakuw
链接:https://leetcode.cn/problems/jian-sheng-zi-lcof/solutions/1382261/by-nehzil-w61p/
来源:力扣(LeetCode)