剪绳子
剪绳子
http://www.nowcoder.com/questionTerminal/57d85990ba5b440ab888fc72b0751bf8
- 自顶向下
int cutRope(int number) { vector<int> memo(number + 1, 1); return helpCutRope(memo, number); } int helpCutRope(vector<int> &memo, int number) { if(number == 1) return 1; if(memo[number] > 1) return memo[number]; for(int i = 1; i < number; i++) { memo[number] = max( memo[number], i * ((number - i) <= helpCutRope(memo, number - i) ? helpCutRope(memo, number - i) : number - i)); } return memo[number]; } - 自底向上
int cutRope(int number) { vector<int> dp(number + 1, 1); for(int i = 2; i <= number; i++) { for(int j = 1; j < i; j++) { dp[i] = max(dp[i], j * (dp[i - j] <= (i - j) ? i - j : dp[i - j])); } } return dp[number]; }


