まず、シーケンスはマジックと呼ばれる Purferの配列、彼は木を表すことができ、各ノードは、この場合の程度発生-1(2-N-のこのよう全長)。
次いで DP と、F [i]は[J] [K]が前面で表されるiは点番目j個の点は、長さを構成するk個のPurferの(もちろん、基準を満たすために)配列を、それが$ Fであり、[I] [J ] [k]は= F [I -1] [J] [K] + \和\ limits_ {i = 0} ^ {[I] -1} F [I-1] [J-1] [KL] \ CDOT C(K、L)$ 、同様にバックパックを除去することができる I (J およびK 逆に)、その後再帰的であることができます。
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 の#define N 105 4 の#define MOD十億七 5 int型、T、N、F [N]、[N] [N]、C [N]、[N]。 6 INT メイン(){ 7 ため(int型 i = 0 ; I <= 100 ; iは++)C [i]が[ 0 ] =のC [i]は[I] = 1 。 8 のために(int型 I = 2 ; iが<= 100 ; I ++ ) 9 ため(INT J = 1; J <I、J ++)C [I] [J] =(C [I- 1 ] [J] + C [I- 1 ] [J- 1 ])%MOD。 10 のscanf(" %dの"、&T)。 11 一方(t-- ){ 12 のscanf(" %d個"、&N) 13 のmemset(F、0、はsizeof (F))。 14 F [ 0 ] [ 0 ] = 1 。 15 のためには、(int型、I = 1(scanf関数をiは++; iがn = <)" %のD "、&[I])。 16 のためには、(int型 = Iを1 ; iが<N =; I ++ ) 17 のための(INT J = I; J; j-- ) 18 のための(INT K = N 2、K> = 0 ; k-- ) 19 のための(int型の L = 0 ; L <[i]は、L ++ ) 20 F [J] [K] =(F [J] [K] + 1LL * F [J- 1 ] [KL] * C [K] [ L])%のMOD。 21 のprintf(" %d個" 、N) 22 のための(int型I = 2、iがn <; iは++)のprintf(" %dの"、F [i]は[I- 2 ])。 23 のprintf(" %Dを\ n "、F [n]は[N- 2 ])。 24 } 25 }