1つの#include <iostreamの> 2の#include <cmath> 。3 。4 使用して 名前空間STD; 5 。6 / * * 7 *タイトル分析: 8 *いくつかの例を挙げると、法律に見ることができます。 9 2 * 2 * 4 10 * 5:2 * 3 11。 * 6:3 * 12である * 7:2 * 2 * 3または4 * 3 13である * 8 * 3 2 * 3 14 3 * 3 * 9 * 3 15 2 * 2 * 3 3又は4 * 3 * 3 * 10 16 * 11:2 * 3 * 3 * 3 。17 * 12:3 * 3 * 3 * 3 18は、 * 13:2 * 2 * 3又は4 * 3 * 3 * 3 * 3 * 3 。19 * 20 :以下の分析である* 21 *最初に[0]実際には、わずか2または3であることができる、デジタルであってもよい[m]をkにKを決定します。 22 もちろん*、それらを考慮していない人たちは、単にそれらの、4、しかし= 2 4 * 2があるかもしれません。 23 私たちも考慮されていない数6より大きい* 3 * 5 <2 * 3,6 <3、我々は分裂し続けなければなりません。 24 *第二に、数2は確かに3未満である、数2と3を見て、なぜですか?2 * 2 * 2 <3 * 3ので、そのタイトルはシンプルです。 25 直接剰余をnで割った* 3は、2つまたは2 2 2ライン上かから判断されます。 図26は、 所定のトピックM> 1であるので、それだけで2 * 1 * 1 2 3 *のみ、直接バックライン上のこれらの2つの特別なケース。 27 * 28 より多くの時間がかかるだろう行うには、動的プログラミングを使用して、O(n個のログ):*指数複雑さがあります。 29 * / 30 ロング ロング n_max_3(ロング ロングN-){ 31は IF(N - == 2 ){ 32 リターン 1。; 33れる } 34は、 IF(N == 3 ){ 35 リターン 2 。 36 } 37 長い 長い X = N%3 。 38 長い 長い Y = N / 3 。 39 であれば(x == 0 ){ 40 リターン POW(3 、Y); 41 } 42 他の 場合(Xの== 1 ){ 43 リターン 2 * 2 *(長い 長い)POW(3、Y - 1 )。 44である } 45 他{ 46が 戻り 2 *(ロング ロング)POW(3。、Y)を、 47 } 48 } 49 50 // あなたの長さnの文字列を与える、Mロープ部分(mは、切断nはくださいN> 1およびM> 1)、各ロープの長さは、[0]、K [1 Kと呼ばれ、整数である ]、···、K [M]。[0] XK [1] k個ます X ... XK [m]の最大の可能な製品はどのくらいですか?ロープの長さ8:00である場合、例えば、現時点で得られた生成物2,3,3は最大18である三つのセクションの長さにカット。 51 // 52 // 入力説明: 53 // 入力数N、タイトル面を見る意味します。(2 <= N - <= 100) 54である // 55 // 56である // 出力の説明: 57 // 出力答え。 58 // 例1 59 // 入力 60 // 8 61である // 出力 62がある @ 18が 63である INT メイン(){ 64 ロング ロング N- = 0 ; 65 CIN >> N-; 66 COUT << n_max_3(N-)<< ENDL; 67 リターン 0 ; 68 }