タイトル
あなたは、[0]、Kの長さの文字列を与えるnは、整数mセクションのロープの長さに切断(mは、nは整数であり、nは> 1およびM> 1)してください、各ロープの長さをKと呼ばれ[1] ... K [M] 。[0] kはウィルK [1] ... * K [m]は、最大の可能な製品がどのくらいあるの?ロープの長さ8:00である場合、例えば、現時点で得られた生成物の三つの部分2,3,3の長さにカット最大18です。
出典:滞在ボタン(LeetCode)
:リンクhttps://leetcode-cn.com/problems/jian-sheng-zi-lcof
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
思考
私はそれが普通のDPは思った
、つまり、重要な点を見落としDPのものと種類[IJ] 2つの状態が、ありますもはや分割と分割をすることができます
ゲイン
特別DP、式にして、DP最大を(提供したことを覚えておくべきセクションタイトル)
コード
class Solution {
//dp[n]:长度为n的绳子的最大乘积
//dp[1]=1.dp[2]=1
public int[] dp;
public int cuttingRope(int n) {
dp=new int[n+1];
dp[1] =1;dp[2]=1;
for(int i= 2;i<n+1;i++){
for(int j=1;j<i+1&&(i-j)>0;j++){
dp[i] =Math.max(dp[i],Math.max((i-j)*j,j*dp[i-j]));
}
}
return dp[n];
}
}