2019 FJNUの低いコンパイルGレースのタイトル(DFSゲーム)

###トピックのリンク###

 

効果の件名:

+ 1、アリス0:00に立って、ボブは、n + 1つの点に立って0〜n個の軸の数があります。1〜重みの各々におけるnが有しています。彼らが停止されるまで、アリス2は左に(それらが移動しなければならない)、アリスは、n + 1が停止に移動各セルは、ボブが0に移動右のセル又は二つのセル、セルまたはモバイルボブへそれぞれ移動が停止しますボブの合計よりもアリスの場合ならば、経過値以上の和の値が、その後、アリスは、抗ボブ勝利を獲得するとき。アリス最初のショット、値に来るには、2個のスマート十分に連れ去られ、値はもはや離れて撮影することができますコースアウトしないする必要があります。

 

分析:

1、明らかにゲームタイトル。

図2に示すように、DFSはアリスが撮影とき、2つの移動は(ステップまたは2つのステップを取る)があり、すべての可能な列挙します。例えば、状態が勝つためにのために、「アリスは今、さらに一歩進め、」アリス、ボブは列挙(2つだけの移動)の代わりに行ってきましたステップバックを取り、その後、ボブは、アリスが勝つ何に関係なく行くことにするかどうかを判断した場合ので、アリスはこのステップを取る後、ボブは、操作が、今回は状態を勝つためにどのように関係なく勝つことができません。

3、歩行この場合、2つのアリス、アリスを列挙よう瞬間xの位置xは、そのような層は、uは、それ自体の状態を勝つ来るかもしれない場合ならば、真を返す伝えるDFSは、歩いすることができます状態を勝つために変換されます。

 

ゲームポイント分析:現時点での位置は今、xが2人の移動がU1またはU2を来させることができ、Xの場合。u1とu2の勝利ポイントと同時に場合、xはまた、ポイントで勝っている; U1はポイントを獲得する場合、ポイントU2は失敗する運命にされ、プレイヤーはxで来るスマート十分であるため、その後、xはまた、ポイントで勝っていますそれは点xを獲得するように、U1で来るの後、同じを失うu1とu2のポイントならば、xはまた、ポイントを失っています。だからこそ 失うポイントにのみポイントを失いながら勝利ポイントは、ポイントを失うか、ポイントを獲得へと変換することができます。

 

契約の詳細:

ポイントを介していない裁判官に、繰り返されるので1、この質問は、VISブールタイプを設定すべきではありません。

図2に示すように、臨界点は、好ましくはレイド判断(X == N + 1及びy == 0)が来るされています。

 

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

 

書式#include <iostreamの> 
の#include <アルゴリズム> 
書式#include < 文字列の.h>
 使用して 名前空間はstdを、
int型T、N。
int型 [ 18 ]。
INT TOX [ 2 ] = { 12 }。
int型玩具[ 2 ] = { - 1、 - 2 }。
int型 VIS [ 18 ]。
ブール DFS(int型のx、int型の Y、INT RES、INT ANS){
     場合(X == N + 1 && Y ==0リターン解像度> ANS;
    ブールQ;
    以下のためにINT iは= 0 ; I < 2 ; I ++ ){
        Q = ;
        int型のu、RES1。
        もし(x == N + 1)U = X、RES1 = 0 他の{
            U = X + TOX [I];
            もし(U> N + 1続けます
            身長[I] ++ ;
            RES1 =(身長[I] == 20 :[I])。
        }
        INT J = 0 ; J < 2、J ++ ){
             int型V、ANS1。
            もし(Y == 0)V = Y、ANS1 = 0 他の{
                V = Y +の玩具[J]。
                場合(V < 0続けます
                [V]に ++ ;
                ANS1 =(VIS [I] == 20 :[I])。
            }
            BOOL = DFS W(U、V、RES + RES1、ANS + ANS1)。
            もし(!Y = 0 [V])VIS - もし(!{W)
                Q = ;
                休憩;
            }
        }
        もし(!X = N + 1)VIS [U] - もし(Q)リターン 
    }
    リターン はfalse ;
}
int型のmain()
{
    scanf関数(" %のD "、&T)。
    一方、(t-- ){
        scanf関数(" %のD "、&N)
        以下のためにINT iが= 1 ; I <= N; I ++)のscanf(" %dの"、および[I])。
        A [ 0 ] = [N + 1 ] = 0 ;
        もし(DFS(0、N + 100))のprintf(" アリス\ n " );
        のprintf(" ボブ\ N " );
    }
}

 

 

 

 

おすすめ

転載: www.cnblogs.com/Absofuckinglutely/p/12008807.html