[貪欲]カードの共有の問題

ソリティアリングの共有

 

ソリティアnoip2002を共有   

そこN カードのスタックは、複数のシートのスタックとは、それぞれ、カードの総数は、でなければなりませんNの倍数。複数のカードは、いずれかの杭を取り、その後に移動することができます。

号に:ルールを移動カード1 取らカードヒープのみ号に移動2 、番号ヒープにヒープのみ号に移動し、Nカードを取るN - ;その他ヒープ1カードのヒープを取る、ヒープに隣接する左または右に移動することができます。

今では多くのように動くの少なくとも数両方のスタックあたりのカードの数とモバイルの方法を見つけるように求め

カードの最初の束は、カードのみ第二のスタックカードで(与えたりするために頼む)と仮定することができる異なります

杭は、廃棄物の再処理が発生する前に対処する必要がある(杭杭のみの契約を検討した後、

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
#define RGレジスタ
 のconst  int型 N = 1E6 + 5、M = 1E6 + 5、INF = 0x3f3f3f3f、P = 9999973 int型 N、[N]、x = 0、ANS = 0 
テンプレート < クラス T> ボイド RD(T&X){ 
    X = 0INT W = 0CHAR CH = 0 しばらくワット(isdigit(CH)!)| = CH == ' - '、CH =getchar関数();
    一方、(isdigit(CH))X =(X << 1)+(X << 3)+(CH ^ 48)、CH = GETCHAR()。
    X?= W - X:X; 
} 

int型のmain(){ 
    RD(n)は、
    以下のためにint型 i = 1 ; iは= N <; ++ I)RD([i])と、X + = [I]。
    X / = N。
    int型 i = 1 ; iが<= N ++ I)の
     場合([i]は-x)++ ANS、[I + 1 ] + =([I] - X)。
    printf(" %dの" 、ANS)。
    リターン 0; 
}

 

【HAOI2008】菓子転送

サークルに座って子供たちは、それぞれがお菓子aiを持って、n個存在します。たったの約2人あたりのお菓子をお届けします。一人一人が1のためのキャンディ価格を渡します。すべての個人は、キャンディの最小コストを等しく与えることを求めています。

指定された私の子供たちはお菓子の愛の作品を始めとし、Xiがお菓子の西片は、Xiの<0の場合、i番目の子Xiの粒子に最初のi-1番目の子を説明した最初のi-1番目の子供へのi番目の子を示し、キャンディ、X1は、n番目の子供のお菓子に子供の数を表します。X1 | | + | X2 | + | X3 | + ... + | Xnの|だから、最終的な答えは、ANS =です。最初の2人の子供が彼にX2のキャンディ片、最終的に残ったA1-X1 + X2キャンディ片を与えたので、しかし、最初の子のために、彼はn番目の子X1のキャンディ片を与えた、キャンディ片は、A1-X1を残しました。A1-X1 + X2 = AVE:質問の意味をよると、最後には、方程式を得る、キャンディAVEの数に等しいです。

最初の子供のための1、A1-X1 + X2 = AVE - (C1が= A1-AVE次のように仮定して)> X2 = AVE-A1 +のX1 = X1-C1

最初の2人の子供のために、A2-X2 + X3 = AVE - > X3 = AVE-A2 +のX2 = 2ave-A1-A2 +のX1 = X1-C2

最初の3人の子供のために、A3-X3 + X4 = AVE - > X4 = AVE-A3 +のX3 = 3ave-A1-A2-A3 +のX1 = X1-C3

n番目の子のために......、-Xnの+ X1 = AVE

Xiはできるだけ小さい和の絶対値を期待し、その| X1 | + | X1-C1 | + | X1-C2 | + ... + | X1-CN-1 | 留意、できるだけ小さいこと| X1-CI |ジオメトリ重要性は、数直線を点X1からCIですので、質問は次のようになります。与えられたn個の距離を見つけて、自分の小さな点を試して、数直線上の設定ポイントが、ポイントは、これらの数字がでているということです最初から谷へロス桁(問題解決

おそらく遼を理解するためにそれを再度押します

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
#define MAX(X、Y)(X)<(Y)?(Y):( X)
 の#define MIN(X、Y)(X)<(Y)?(X):( Y)
 の#defineが長いっ長い
 の#define ABS(X)(X)<0 -x:?X;
#define RGレジスタ
 のconst  int型 N = 1E6 + 5、M = 1E6 + 5、INF = 0x3f3f3f3f、P = 9999973 int型のn; 
LL ANS = 0、[N]、合計[N]、B [N]、AVE = 0 
テンプレート < クラス T> ボイド RD(T&X){ 
    X =0 ; INT W = 0CHAR CH = 0 しばらく W | = CH ==(isdigit(CH)!)' - '、CH = getchar関数();
    一方、(isdigit(CH))X =(X << 1)+(X << 3)+(CH ^ 48)、CH = GETCHAR()。
    X?= W - X:X; 
} 

int型のmain(){
 //     freopenは( "in.txt"、 "R"、STDIN)。
    RD(n)は、
    以下のためにint型私= 1 ; iが<= N; I ++)RD([i])と、和[I] =和[I- 1 ] + [I]。
    AVE=合計[N] / N。
    以下のためにint型 i = 1 ; iは= N <; ++ I)B [i]は= bの[I- 1 ] -a [I] + AVE。
    ソート(B + 1、B + N + 1 )。
    ミッドLL; 
    もし(N%2)中間= B [N + 1 >> 1 ]。
    半ば=(B [N >> 1 ] + B [N >> 1 | 1 ])/ 2 以下のためにint型 i = 1 ; iは= N <; ++ I)ANS + = ABS(ミッドB [I])。
    printf(" %のLLD " 、ANS)。 
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/lxyyyy/p/11285684.html