链接:https://leetcode-cn.com/problems/jian-sheng-zi-lcof/solution/zhu-shi-xing-ti-jie-dong-tai-gui-hua-jia-4xfp/
解题思路:
一根绳子剪成两段后,实际上还是根绳子,那么就是一个问题可以拆分成相同子问题来解决,所以考虑用动态规划,这里要注意dp应该存储的内容
- 注意:
1.dp的定义
2.循环条件有个隐藏值就是j只需要循环到i的一半就行
class Solution {
public:
// 本题采用动态规划去求解是一种类似于暴力的方式
int cuttingRope(int n) {
if(n<=3)return n-1;
vector<int>dp(n+1,0);
// 这里dp里面存储中,索引表示当前这一小段的长度,值代表长度值,换句话说就是dp[2]=2代表长度为2的绳子的长度为2
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
dp[3] = 3;
for(int i =4;i<=n;++i){
// 这里循环到i/2原因是3,1和1,3分段的时候是一样的for(int j =1;j<i;++j)也可以
for(int j =1;j<=i/2;++j){
dp[i] = max(dp[i],dp[j]*dp[i-j]);
}
}
return dp[n];
}
};