タイトル説明
これは長さnのロープです。ロープを整数長のmセグメントに切断してください(mおよびnは整数、n> 1およびm> 1、m <= n)。各セグメントの長さはkとして記録されます。 [1]、...、k [m]。k [1] x ... xk [m]の可能な最大積は何ですか?例えば、ロープの長さが8本の場合、2本、3本、3本の3本に切ります。このときの最大積は18本です。
説明を入力してください:
数値nを入力します。意味については、タイトルを参照してください。(2 <= n <= 60)
出力の説明:
答えを出力します。
例1
入る
8
出力
18
public class Solution {
public int cutRope(int target) {
if (target == 2) {
return 1;
}
if (target == 3) {
return 2;
}
int[] dp = new int[target+1];
dp[1] = 1;
dp[2] = 2;
dp[3] = 3;
for (int i = 1; i <= target; i++) {
for (int j = 1; j <= i/2; j++) {
dp[i] = Math.max(dp[i],dp[j]*dp[i-j] );
}
}
return dp[target];
}
}