Que vão desde o número de colunas para baixo o P2401 vale

Tópico Ligue .

Solução

design de Estado

Set \ (f_ {i, j} \) de \ (1 \) para \ (I \) são organizados, que \ (J \) um \ (\ text { '<' } \) do número de programas.

transição de estado

Tente de (I \) \ prossegue para o \ (i + 1 \) , a substância é considerada a \ (i + 1 \) é introduzido para que a posição da sequência.

  • Se você inserir para a esquerda, irá adicionar um sinal de maior que ( \ (1 \) caso)
  • Se a inserção para o direito mais, irá adicionar menos de um número ( \ (1 \) caso)
  • Se você inserido entre um a menos, menos do que destruir um gerar um número menor que e maior que, maior do que o equivalente de um novo número ( \ (J \) caso)
  • Se o número é maior que um entre o inserto, destruir um número maior do que, produzir um maior que e menor do que um número, menos do que o equivalente de um novo número ( \ (I -. 1 - J \) caso)

Para resumir:

  • \ (j + 1 \) caso é maior do que o aumento de um número, isto é \ (f [i + 1] [J] \ recebe f [i] [j] * (j + 1) \)
  • \ (i - j \) caso aumento de um número menor do que \ (f [i + 1] [j + 1] \ recebe 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]);
}

Acho que você gosta

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