GarsiaWachsアルゴリズム

 このアルゴリズムは、合併の石(大規模データ版)の問題を解決するために使用することができます。

 

ロサンゼルスの谷のトピック:P5569 [SDOI2008]石がマージ

 

石の束(チェーン)の場合:

  右の[K] <=石[K + 2]、次いで合わせた石[K + 1] + =石[K]左まで離れ開始から1石。

  石まで前方[J]>石[K] +石[K + 1]とjの後ろに配置新しい組み合わせの数を移動する2. K  

      そのようなjが前面に、存在しないしない場合

  3.我々は[N - 1]、石[n]と石である合併の最後の2つの数値を例えばKを見つけることができない場合(明らかに2つの数値が最も小さいです)

  4.最初のステップを繰り返します。

 

コードは以下の通りであります:

1  / * 
2  2019年10月30日
 3  P5569 [SDOI2008]石子合并
 4  czq
 5  * / 
6  
7の#include <cstdioを>
 8の#include <iostreamの>
 9の#include <アルゴリズム>
 10  使用 名前空間STD。
11  のconst  int型 N = 4E4 + 10 12  
13  INT N。
14  int型の石[N]。
15  
16  のint main()の
 17  {
 18      CIN >> N。
19      のためのint型I = 1は、<= N-I; I ++)scanfの(" %Dを"ストーン[I]);
 20は 
21である     // 記録答えANS、左端の添字の左側の代表的な
22である     INT ANS = 0、左= 1。;
 23は、 
24      // すなわち、少なくとも三つのロックフィル深夜がある場合、1-N-N-左。
25を     一方(左<N-- 1。 26は     、{
 27          のint K;
 28          (左K =; K <N - 1。 ; K ++ 29          {
 30              IF(石[K] <石= [K + 2 ])
 31れます             {
 32                  ストーン[k個の+ 1 ] + =石[K]; // マージ
33である                  [k個の+ ANS石+ = 1 ];       // 回答に加え
 34である                 // 右の左にkはk個の上書きする
35                  ためINT J = K; J>左; Jが、)ストーン[J] =石[J - 1 ];
 36                  ++左;     // そう左へシフトプラス1は
 37  
38である                 // アップも左と第二段階は、
39                  INT J = K用+ 1 ;
 40                  ながら(石[J]>ストーン[J- 1 ] && J>左)
 41である                 {
 42である                     // 交換、新たな複合石の前方への移動
43が                      スワップ(石[J]、石[J- 1 ]);
 44である                      J - ;
 45                  }
 46れる                 BREAK ;
 47              }
 48          }
 49          // なしKある
50          IF(N-K == - 1 51は         、{
 52である             // 最後から二番目の反応器に添加右端石は、
53である              石[N - 1 ] + = 石[N-];
 54である             //右端の石と相まって、砂利右端が存在しないので、-N 
55              ANS石+ = [ - N - ];
 56である         }
 57である     }
 58  
59      // プラス石の残りの二つの山
60      ANS石= + [N-] +石[N- 1 ];
 61は、 
62である      COUT ANS << << ; ENDL
 63が 
64      リターン 0 ;
 65 }

  コードは、例を参照して読まれていない場合

  次に、実施例1 =左のn = 6のANS = 0 dは新しいマージの数である:石が存在すると仮定6を重ね

 

 

 

コードの実行ショット:

  

 

  ランダムな例が引用され、あなたはそれを自分で理解することができ、非常に良いではありません

おすすめ

転載: www.cnblogs.com/nonameless/p/11768957.html