バックパック

説明

所与  のn  サイズ愛を持つアイテム、整数  mは  バックパックの大きさを表します。どのように完全なあなたは、このバックパックを埋めることができますか?

あなたは小さな断片に任意の項目を分割することはできません。

Example 1:
	Input:  [3,4,8,5], backpack size=10
	Output:  9

Example 2:
	Input:  [2,3,5,7], backpack size=12
	Output:  12
	

チャレンジ

O(n×mの)時間とO(M)メモリ。

O(n×mの)メモリを使用すると、メモリを最適化する方法がわからない場合も可能です。

思考:F [i] [j]は、i番目の元記事を充填することができる容量Jバックパックにアイテムの数から選択される示します。

パブリッククラスソリューション{ 
    / ** 
     * @param M:アンmはバックパックのサイズを表す整数
     * @param A:与えられたNサイズAと項目[I] 
     * @return:最大サイズ
     * / 
     パブリックINTバックパック(INT M 、INT [] A){ 
        ブールF []は[] =新しいブール[A.length + 1] [M + 1]。
        {(I ++; I <= A.length INTがI = 0)するための
            (int型J = 0であり、j <= Mであり、j ++)のために{ 
                F [I] [J] = FALSE; 
            } 
        } 
        F [0] [0] = TRUE; 
        以下のために(INT I = 1; I <= A.length; I ++){ 
            ため(INT J = 0であり、j <= Mであり、j ++){ 
                F [I] [J] = F [I - 1] [J]。
                IF(J> = A [I-1] && F [I-1] [J - A [I-1]]){
                    F [I] [J] = TRUE; 
                } 
            } // jに対する
        } //私は
        
        のために(INT I = M、I> = 0; i--){ 
            IF(F [A.length] [I]){ 
                Iを返します。
            } 
        } 
        
        0を返します。
    } 
}

  O(M)空間ソリューションの複雑さ

パブリッククラスソリューション{ 
    / ** 
     * @param M:アンmはバックパックのサイズを表す整数
     * @param A:与えられたNサイズAと項目[I] 
     * @return:最大サイズ
     * / 
     パブリックINTバックパック(INT M 、INT [] A){ 
        int型のF [] =新しいINT [M + 1]。

        <{(A.length I ++ iについてINT iが= 0)
            {(j--にint J = M; J = A [i])と> 
                、F [J] = Math.max(F [j]をF [J - A [I]] + A [I])。
            } 
        } 
        [M] Fリターン。
    } 
}

  

 

 

おすすめ

転載: www.cnblogs.com/FLAGyuri/p/12078365.html