いたずら石杭

トピック:のhttp://codeforces.com/problemset/problem/227/D

質問の意味:N石の数がヒープ、石の各ヒープが有するI石の山に結合されたすべての石のこのパイルの各合成コスト、(石の山石の別の山に移動しようとしている)を組み合わせることにより、数、K I制限下には、それぞれを積み上げ石を組み合わせることが可能で k回、最終的な総組み合わせ最小コストを見つけるために、別のスタックに、K番目のスタック後に石を移動させる必要があります。

問題の解決方法:emmmmm、それは、最小コストを見つけるために、その後、石の石杭の最大数は確かに動いていない、石のこの山を移動するには、いくつかのk倍の石の小さな山を置くので、これは石のk個のヒープを動かしているので、それらのそれぞれに石のこのk個の山は、このk個の* kのヒープが二回移動、というようにすることを、自分の体に組み込まれた石のk個のヒープよりも小さくなっています。

1 k倍

K * K 2倍

K * K * K 3回

K * K * K * K 4回

         。

         。       

         。

         。

すなわち、そうK * 1 * + K ^ 2 * 2 *数+ K ^ 3 * 3 *数の最小数の合計コスト.....

もちろん、kは必要公報文である、最小ヒープは、n-1移動時間を、第二の最小移動スタックN-2倍、最大スタックは、特定のコードを見て、移動しません。

データのほとんどは、長い長い範囲であることに注意してください。

1つの#include <地図>
 2の#include <積層>
 3の#include <キュー>
 4の#include <cmath>
 5の#include < ストリング >
 6の#include <限界>
 7の#include <cstdioを>
 8の#include <ベクトル>
 9# <cstdlib>含む
 10の#include <CStringの>
 11の#include <iostreamの>
 12の#include <アルゴリズム>
 13  の#define Sccを(C)のscanf( "%のC"、&C)
 14  の#define Scsを(S)のscanf( "%sの」、S)
 15  の#defineサイエンス(X)のscanf( "%dの"、
&X) 16  の#defineSCI2(X、Y)のscanf( "%dの%のD"、およびX&Y)
 17  の#define SCI3(X、Y、Z)のscanf( "%D%D%D"、およびX&Y、およびZ)
 18  の#define SCL(X)のscanf( "%I64d"、&x)は
 19  の#define SCL2(X、Y)のscanf( "%I64d%I64d"、およびX&Y)
 20  の#define SCL3(X、Y、Z)のscanf( "% I64d%I64d%I64d」、およびX&Y、およびZ)
 21  の#defineのPri(X)のprintf( "%d個の\ n"、x)は
 22  の#define PRL(X)のprintf( "%I64dの\ n"、x)は
 23  #define Prcを(C)のprintf( "%のCする\ n"、C)
 24件 の#define PRS(複数可)のprintf( "%Sの\ n"、S)
 25  の#defineための式(I、x、y)のための(INT iが= X; I yを<。
I ++) 26  の#define For_(I、x、y)がため(I = xをint型、iは= yと<; iは++します)
27  の#defineのための(I、x、y)はFFor(; I> Y; I = xをint型i--)
 28  の#define FFor_(I、x、y)は(I = xをint型のために、I> = Y; iが- )
 29  の#define MEM(F、X)のmemset(F、X、はsizeof(F))
 30  の#define LL長い長い
 31  の#define ULLのunsigned long長い
 32  の#define MAXSIZE 100005
 33  の#define INF 0x3f3f3f3f
 34  のconst  int型 MOD = 1E9 + 7 35  CONST  ダブル PI = ACOS( - 1.0 )。
36  
37  使って 名前空間STDを、
38  INTCMP(LL、LLのB)
 39  {
 40      リターン < B。
41  }
 42  のint main()の
 43  {
 44  
45      LLをN。
46      SCL(N)
47は     int型のI;
48      LL [MAXSIZE] = { 0 }。
49      のために(i = 1 ; iが<= N iが++ 50          SCL([I])。
51      ソート(+ 1、A + 1個の + N)。
52      LLのTMP = 0 53      For_(I、1、N-1// ループのこれら二つの順序なお、
54は      TMP = A + [I] *(N- I);
 55      For_(I、1 、N-)
 56である      [I] = A + [I- 1 ]。// *同じである、すなわち、([M] -a [MK])毎にスタック石を組み合わせたXのk倍の電力を計算するために使用されるCNT、
57である     INT Q;
 58      サイエンス(Q);
 59      ながら( - Q 60      {
 61は、          LL ANS = 0 ;
 62であり         、LL K
 63であり         、SCL(K)
 64          INT T = K;
 65          LL = CNT 1、M = N- 1。;
 66          IF(= K!1。 67          {
 68              ながら(M> = K)// kがnに等しいより大きい場合、実行されず、直接実行ANS + = CNT * [M ];、 すなわち、最小のコストがフロントN-あります1つのスタックと石の数、すなわちA * 1 [m]の
69              {
 70の                  ANS + =([m]は-a [MK])* CNT;
 71である                  ++ CNT ;
 72                  M- = K;
 73である                  K = K * T。// 変更kはKK ^ 2のk ^ 3のk ^ある 4 ... 初期kのサイズを掛けたびに、初めは書かK * = K、WA 1日の午後、私はあまりにもハードQAQた
74              }
 75              ANS + = * CNT A [M];
 76          }
 77          
78             = ANS TMP;
 79          のprintf(" %I64d "、ANS); // 出力も、この謎。
80      }
 81      リターン 0 ;
 82 }
コードの表示

 ああ、問題ありませんでした、彼は本当に、一日かかりました。多くの場所ではうまく働いています。ああ。

おすすめ

転載: www.cnblogs.com/hbhdhd/p/11413957.html