トピックリンク:いくつかの問題のP2822の組み合わせは、
それが、我々だけ**のような、このある再帰**(パスカルの三角形)の数との組み合わせを必要とする二次元のプレフィックスと水です:
$$ C_N ^ = C_ {N-M-1} ^ M + C_ {N-1 } ^ {M-1} $$
のような、フィルムのエッジは、再帰的側面を取るために、メンテナンスの数は、二次元の接頭辞であることができます。
(私は私が間違っサイクル境界$ WA $ $ N $倍だったあなたを教えてくれません
$コード$:
書式#include <iostreamの> の#include <cstdioを> する#include <cmath> 使用して 名前空間をSTD。 長い 長い F [ 2005 ] [ 2005 ]、和[ 2005 ] [ 2005 ]。 長い 長い CH [ 2005 ] [ 2005 ]、CS [ 2005 ] [ 2005 ]。 int型、T、N、M、K。 int型のmain() { // freopenは( "data.in"、 "R"、STDIN)。 // freopenは( "baoli.out"、 "W"、STDOUT)。 scanf関数(" %D%D "、&T、&K)。 用(INT iは= 0 ; I <= 2001 ; I ++ ) { F [i]が[ 0 ] = 1 ; CH [i]が[ 0 ] = 0 ; CH [ 0 ] [I] = 0 ; CS [ 0 ] [I] = 0 ; CS [ 0 ] [I] = 0 ; 和[I] [ 0 ] = 0 ; 和[ 0 ] [I] = 0 ; } のための(INT I =1 ; I <= 2001 ; I ++ ) { ため(INT J = 1 ; J <= I; J ++ ) { F [I] [J] =(F [I- 1 ] [J] + F [I- 1 ] [J- 1 ])%K。 } } のために(INT iが= 1 ; I <= 2001 ; I ++ ) { ため(INT J = 1 ; J <= I; J ++ ) { 場合(F [I] [J] == 0)F [i]は[ J] = 1 。 他に F [i]は[J] = 0 ; } } のためには、(INTは私= 1 ; I <= 2001 ; I ++ ) { ため(INT J = 1 ; J <= I; J ++ ) { CH [I] [J] = CH [I]、[J- 1 ] + F [i]は[J]。 } } のために(INT iが= 1 ; I <= 2001 ; I ++ ) { ため(INT J = I; J <= 2001 ; J ++ ) { CS [J] [I] = CS [J- 1 ] [I] + F [j] [i]は、 } } のために(INT iが= 1 ; I <= 2001 ; I ++ ) { ため(INT J = 1 ; J <= I; J ++ ) { 和[I] [J] =和[I- 1 ] [J- 1 ] + CS [I] [J] + CH [I] [J] - F [I] [J]。 } } 一方(t-- ) { scanf関数(" %D%D "、&N、&M)。 もし(nは==0 || M == 0)COUT << 0 << ENDL。 他のprintf(" %がLLD \ n " 、和[N] [分(N、M)])。 } 戻り 0 。 } / * 1 12 1962年1183 * /