のみによる最終染色ので CI 数の数であり、状態のゆえ定義F [A] [B] [ C] [D] [E] [p]は発現さ= Aを1、CI 、 Bの= 2 Cl Aを、 ......とE CI = 5、最後に選択されたCI = p個の A。状態転送:見つけるのp メイクP-1 回以下の選択肢を、私たちはメモリ検索を書き込むために使用することができます(コードを参照)式を書くことができます。
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 長い 長 N、K、S [ 6 F]、[ 16 ] [ 16 ] [ 16 ] [ 16 ] [ 16 ] [ 6 ]。 4 長い 長い(DFS のint、int型 B、int型 C、int型 D、int型の E、int型P){ 5 であれば(F [A] [B] [C] [D] [E] [P])リターン[F A] [B] [C] [D] [E] [P]。 6 もし(A)[A] F [B]、[C]、[D]、[E] [P] + =(A-(P == 2))* DFS(A- 1、B、C、D、E、1 ); 7 場合(B)F [A] [B] [C] [D] [E] [P] + =(B-(のp == 3))* DFS(A + 1、B- 1、C、D、すなわち、2 )。 8 であれば(C)F [A] [B] [C] [D] [E] [P] + =(C-(Pの== 4))* DFS(B + 1、C- 1、D、 E、3 )。 9 もし F(D)[A] [B] [C] [D] [E] [P] + =(D-(Pの== 5、B、C +))* DFS(1、D- 1、 E、4 )。 10 であれば(E)F [A] [B] [C] [D] [E] [P] + = E * DFS(A、B、C、D + 1、E- 1、5 )。 11 リターン F [A] [B] [C] [D] [E] [P] = F [A] [B] [C] [D] [E] [P]%十億七 + 十億七。 12 } 13 INT メイン(){ 14 のscanf(" %のLLD "、&N) 15 のために(int型 i = 1 ; iが<= N; iが++ ){ 16 のscanf(" %のLLD "、&K)。 17の S [K] ++ ; 18 } 19 のために(INT I =1 ; iは<= 5 ; I ++)F [ 0 ] [ 0 ] [ 0 ] [ 0 ] [ 0 ] [I] = 1 。 20 のprintf(" %のLLD "、DFS(S [ 1 ]、S [ 2 ]、S [ 3 ]、S [ 4 ]、S [ 5 ]、0) - 十億七)。 21 }