顔の質問オファー安全性を証明するために14 - ロープをカット - ダイナミックプログラミングを

/ * 
タイトル:
	ロープセグメントの切断長さの文字列N、考えるとは、Mは(n> 1、M> 1) 
	ロープセグメントの積の最大値を選択します。
* / 
/ * 
思考:
	動的計画。
	F(N)= MAX(F (1)* F(N-1)、F(2)* F(N-2)、F(3)* F(N-3)、...、F(nは/ 2)* F(NN / 2))。
	最適なソリューションを提供します。
	大きな問題は小さな問題の数に分解することができます。
	ソリューション大きな問題は小さな問題の解決に依存します。
	トップダウンの問題の分析、下から上に問題解決。
* / 
の#include <iostreamの> 
する#include <string.hの> 
する#include <アルゴリズム> 
使用して名前空間STD; 
INT cutRope(数値INT){ 
    IF(数<= 1){ 
        投( "無効なパラメータ"); 
    } 
    IF(数数2 || 3 == ==){ 
        戻り番号1; 
    } 
    INT * maxProduct新しい新しいINT = [数+ 1]; 
    のmemset(maxProduct、0、+数1)。
    maxProduct [1] = 1。
    maxProduct [2] = 2; 
    maxProduct [3] = 3; 
    int型の最大値= 0; 
    用(INT LEN = 4; LEN <=数; lenを++){ 
        = 0マックス。
        以下のために(INT 1 =左、左<= LEN / 2;左++){ 
            COUT << lenの<< " "<<左<<"" << lenの左<< ENDL。

            INT物= maxProduct maxProduct [lenの左] * [左]。
            (MAX <製品){もし
                最大=製品。
            } 
        } 
        maxProduct [LEN =マックス。
        // coutの<< maxProduct [LEN] <<てendl; 
    } 
    マックス= maxProduct [番号]。
    [] maxProductを削除します。
    最大返します。
} 


    COUT << cutRope(8)<< ENDL。
}

   

おすすめ

転載: www.cnblogs.com/buaaZhhx/p/11845540.html