[15] [DP]少し特殊なロープをカット

タイトル

あなたは、[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];
    }
}

おすすめ

転載: www.cnblogs.com/Jun10ng/p/12363679.html