ネットオフ牛 - カットロープ(ダイナミック/貪欲)

タイトル説明

あなたは、[0]、Kの長さの文字列を与えるN、Mの整数ロープセグメントの長さに切断(mは、nは整数であり、nは> 1およびM> 1)してください、各ロープの長さをKと呼ばれ[1]、···、K [M]。[0] XK [1]×... XK [m]の最大の可能な製品がどのくらいあるkのでしょうか?ロープの長さ8:00である場合、例えば、現時点で得られた生成物の三つの部分2,3,3の長さにカット最大18です。

説明を入力します。

数nを入力し、問題の表面の意味を参照してください。(2 <= N <= 60)

 

コード

- * -コーディング:UTF-8 - * - 
クラスソリューション:
     DEF cutRope(セルフ、ナンバー):
        書き込みコードここでは壁紙
        IF番号== 2 リターン 1。
         IF数== 3。 リターン 2つの
         #は得られ法則を見つけ、カットm個のセグメント。mが偶数であると、奇数// = 2 mについて、数// 2-1である。
        IF番号%2 == 0:
            M =番号2-1 //
         
            M =番号2 //
         場合数Mで割り切れる、次にMの積(数)/ Mが乗算されます。各時間Aで割り切れない場合=(数// M + 1 )+ 1、数マイナス、数未満になるまで。
        B =フロート(数)/M 
        A =番号// Mの
        結果 = 1の
         場合 == B:
            結果 = ** M
         しばらく(数>(+ 1 )):
                結果 * = + 1  - = + 1 
            の結果 * = 数の
         リターン結果

高度なコード

問題解決のプログラミング4つの動的特徴: 
①問題の最適解を、 
全体的な問題②に対する最適解は、各サブ最適解に依存して、 
問題の間③小さいのほとんど重複がありますサブ問題、 
④問題の分析から下、下から上の問題を解決します。

貪欲解決策:5以上である場合、N、我々はロープ3の長さ限り切断し、ロープ4の残りの長さは、ロープの2つの長さは、ロープ2を切断したとき。なぜあなたは3が最も小さいサブ問題で、2を選んだのですか?我々はそれを削減する必要がある場合は、それぞれの質問に2,3を備えているため、製品が小さくなります。なぜ3の長さを選ぶのか?時間ときn≥5、3(N-3)≥2(N-2)以来
 
- * -コーディング:UTF-8 - * - 
クラスソリューション:
     DEF cutRope(自己、数):
         #1 ここで、書き込みコード
        动态规划
        なら番号== 2 リターン 1
         であれば数== 3 リターン 2
         当N> = 4时、DP(N)= MAX(DP(I)* DP(NI))

        DP = [0,1,2,3 ]
         のための I における範囲(4、数+ 1 :)
            maxre = 0
             のための J 範囲(1、I // 2 + 1 ):
                maxre = DP [J] * DP [IJ] の場合 maxre <DP [J] * DP [IJ] maxreの
            dp.append(maxre)
        リターン DP [番号]

おすすめ

転載: www.cnblogs.com/ditingz/p/12298093.html