JZ67-剪绳子
剪绳子
https://www.nowcoder.com/practice/57d85990ba5b440ab888fc72b0751bf8?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey
class Solution {
public int cutRope(int target) {
if (target == 2) {
return 1;
} else if (target == 3) {
return 2;
}
return helper(target);
}
private int helper(int n) {
if (n <= 4) {
return n;
}
int ret = 0;
for (int i = 1; i < n; i++) {
ret = Math.max(ret, i * helper(n - i));
}
return ret;
}
}
class Solution2 {
public int cutRope(int target) {
int[] dp = new int[target + 1];
dp[1] = 1;
for (int i = 2; i <= target; i++) {
for (int j = 1; j < i; j++) {
dp[i] = Math.max(dp[i], Math.max(j * (i - j), dp[j] * (i - j)));
// 直接不分开 分成 j i-j(都 不 继续下分) 分成 j(继续下分) i-j
}
}
return dp[target];
}
} 