アイデア:
DP [i] [j]はI + 1位まで示し、そして残りの全ての図と小区間J + 1は、全てのデジタル数列端に有効です。
実装:
1 クラスソリューション 2 { 3 公共: 4 INT numPermsDISequence(ストリングS) 5 { 6 場合(S.empty())戻り 0 。 7 INT N = S.length()、MOD = 1E9 + 7 。 8 ベクトル<ベクトル< INT >> DP(2、ベクトル< INT >(N + 1、0 ))。 9 用(int型 I = 0 ; iが<= N; iが++)DP [ 0 ] [I] =1 ; 10 のために(int型 I = 1を iが++; iが<= N ) 11 { 12の 場合( - S [I 1 ==] ' D ' ) 13 { 14 DP [I&1 ] [N - I] DPを= [I - 1 - 1 ] [N - I + 1 ]。 15 のための(int型 - - I J = N 1 ; J> = 0 ; j-- ) 16 DP [I&1 ] [J] =(DP [I&1] [J + 1 ] + DP [I - 1 - 1 ] [J + 1 ])%MOD。 17 } 18 他の 19 { 20 DPは[I&1 ] [ 0 ] = DP [I - 1 - 1 ] [ 0 ]。 21 のために(INT J = 1 ; - I J <= nであり、j ++ ) 22 DP [I&1 ] [J] =(DP [I - 1 - 1 ] [J] + DP [I&1 ] [J - 1])%MOD。 23 } 24 } 25 リターン DP [N - 1 ] [ 0 ]。 26 } 27 }