class Solution {
public:
int cuttingRope(int n) {
if(n<2) return 0;
if(n==2) return 1;
if(n==3) return 2;
vector<int> dp(n+1);
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
dp[3] = 3;
for(int i=4; i<=n; i++){
for(int j=1; j<=(i/2); j++){
if(dp[i] < dp[j]*dp[i-j]) dp[i] = dp[j]*dp[i-j];
}
}
return dp[n];
}
};
要理解好,dp[i]是i时的最大值,0 1 2 3 比较特殊,不能略过3
当长度是0 1 的时候,绳子没法剪,最大长度是1
长度是 2,剪一刀 1 * 1 ,长度是3, 1 * 2
但是,对后面的长度来说,遇到长度为3的时候,不剪断(长度3)比剪断(长度2)得到的值更大,所以0 1 2 3 要分别对应赋值 0 1 2 3