Que van desde el número de columnas por el valle P2401

Tema Enlace .

Solución

diseño de estado

Set \ (f_ {i, j} \) de \ (1 \) a \ (I \) están dispuestos, que \ (J \) un \ (\ text { '<' } \) de la serie de programas.

transición de estado

Trate de (I \) \ procede a \ (i + 1 \) , la sustancia se considera que \ (i + 1 \) se inserta a la que la posición de la secuencia.

  • Si inserta a la izquierda, se añadirá un signo mayor que ( \ (1 \) caso)
  • Si la inserción a la derecha más, se sumará a menos de un número ( \ (1 \) caso)
  • Si ha insertado entre un menos-que, menos que destruir un generan un número menor que y mayor que, mayor que el equivalente de un nuevo número ( \ (J \) caso)
  • Si el número es mayor que uno entre el inserto, destruir un mayor número que, producir un mayor que y menor que un número, a menos que el equivalente de un nuevo número ( \ (I -. 1 - J \) caso)

Para resumir:

  • Hay \ (j + 1 \) caso es mayor que el aumento de un número, es decir, \ (f [i + 1] [j] \ obtiene f [i] [j] * (j + 1) \)
  • Hay \ (i - j \) caso el aumento de un número menor que \ (f [i + 1] [j + 1] \ obtiene f [i] [j] * (i - j) \)

Código

#include <iostream>
#include <cstdio>

using namespace std;

const int N = 1005, P = 2015;

int n, K, f[N][N];

int main() {
    scanf("%d%d", &n, &K);
    f[1][0] = 1;
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < i; j++) {
            (f[i + 1][j] += f[i][j] * (j + 1)) %= P;
            (f[i + 1][j + 1] += f[i][j] * (i - j)) %= P;
        }
    }
    printf("%d\n", f[n][K]);
}

Supongo que te gusta

Origin www.cnblogs.com/dmoransky/p/12482188.html
Recomendado
Clasificación