/ * タイトル: ロープセグメントの切断長さの文字列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。 }