データ範囲:N、キー<= 1000;
主題の背景を初めて目には、はっきりとDPのグラフ理論ではありませんが、これは明らかに、グラフ理論ではないので、これはDPです。
次に、DP方法を検討
私たちは、I〜Jのプログラムの数は現在、%キー=数、DPを定義[i] [j]は、i番目に今のDPを示し、
最後の答えがdp [n]が[0]です。
移転を考えてみます。
我々はプログラムの%キー= jの数を追加する前に、いくつかの数字で番号iを決定したい場合は、我々は2つのオプションがあります。
i番目を選択し、我々は最初= i番目の%キーの前に選挙を頼みますか?:
INT T = JA [I]%のキー。 もし(T < 0 ) T + =キー。
然后DP [I] [J] + = DP [I-1] [T]
2. i番目のない直接DP [I] [J] + = DP [I-1]〜[J]を選択します。
次にDP [n]が[0]等を出力します。
<ビット/ STDC ++ H>の#include の#define MOD十億七使用名前空間STDを、 インラインint型リード(){ int型 ANS = 0 。 チャー最後= ' '、CH = GETCHAR()。 一方、(CH> ' 9 ' || CH < ' 0 ')最後= CH、CH = GETCHAR()。 一方、(CH> = ' 0 ' && CH <= ' 9 ')ANS =(ANS << 1)+(ANS << 3)+ CH- ' 、CH = GETCHAR()。 もし(最後== ' - ')ANS = - ANS; 戻るANSを。 } int型キーN、。 INT [ 1010 ]; int型の DP [ 1010 ] [ 1010 ]; INT (){メイン Nキー=は、=読み取る() (読み取り); 以下のために(int型 I = 1 [I] = iが++; iが<= N) )(読み取ります。 DP [ 0 ] [ 0 ] = 1 。 用(int型 iは= 1、I ++; iが<= N。){ ため(INT J = 0 ; J <キー、J ++ ){ int型 T = JA [I]%のキー。 もし(T < 0 ) T + = キー。 DP [I] [J] =(DP [I- 1 ] [T] + DP [I- 1 ] [j])%MOD。 } } のprintf(" %dの"、DP [n]が[ 0 ]%のMOD)。 リターン 0 ; }
終わり-