enlace Tema: combinación P2822 de varios problemas
que es un prefijo de dos dimensiones y agua, sólo tenemos una combinación del número de recursiva ** (triángulo de Pascal) ** similares, es la siguiente:
$$ C_n ^ = C_ {n-m-1} ^ m + C_ {n-1 } ^ {m-1} $$
como, borde de la película para tomar lateral recursiva, y el número de mantenimiento puede ser prefijo de dos dimensiones.
(No voy a decirle que estaba equivocada ciclo límite $ WA $ los $ n $ veces
$ $ Código:
#include <iostream> #include <cstdio> #include <math> utilizando espacio de nombres std; largo tiempo f [ 2005 ] [ 2005 ], sum [ 2005 ] [ 2005 ]; largo tiempo ch [ 2005 ] [ 2005 ], cs [ 2005 ] [ 2005 ]; int t, n, m, k; int main () { // freopen ( "data.in", "r", la entrada estándar); // freopen ( "baoli.out", "w", stdout); scanf ( " % d% d " , & t, yk); para ( int i = 0 ; i <= 2,001 ; i ++ ) { f [i] [ 0 ] = 1 ; ch [i] [ 0 ] = 0 ; ch [ 0 ] [i] = 0 ; cs [ 0 ] [i] = 0 ; cs [ 0 ] [i] = 0 ; suma [i] [ 0 ] = 0 ; suma [ 0 ] [i] = 0 ; } Para ( int i =1 ; i <= 2,001 ; i ++ ) { para ( int j = 1 ; j <= i; j ++ ) { f [i] [j] = (f [i- 1 ] [j] + f [i- 1 ] [j- 1 ]%) k; } } Para ( int i = 1 ; i <= 2,001 ; i ++ ) { para ( int j = 1 ; j <= i; j ++ ) { si (f [i] [j] == 0 ) f [i] [ j] = 1 ; otro f [i] [j] = 0 ; } } Para ( int i = 1 ; i <= 2,001 ; i ++ ) { para ( int j = 1 ; j <= i; j ++ ) { ch [i] [j] = ch [i] [j- 1 ] + f [i] [j]; } } Para ( int i = 1 ; i <= 2,001 ; i ++ ) { para ( int j = i; j <= 2,001 ; j ++ ) { cs [j] [i] = CS [j- 1 ] [i] + f [j] [i]; } } Para ( int i = 1 ; i <= 2,001 ; i ++ ) { para ( int j = 1 ; j <= i; j ++ ) { suma [i] [j] = suma [i- 1 ] [j- 1 ] + cs [i] [j] + ch [i] [j] - f [i] [j]; } } Mientras que (t-- ) { scanf ( " % d% d " , y n, y m); si (n ==0 || m == 0 ) cout << 0 << endl; más printf ( " % LLD \ n " , sum [n] [min (n, m)]); } Volver 0 ; } / * 1 12 1962 1183 * /