ロープ(貪欲アルゴリズム)をカット

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 }

 

おすすめ

転載: www.cnblogs.com/zhiliang9408/p/11520604.html