Cod sursa(job #1992088)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 19 iunie 2017 13:22:37
Problema Permutari2 Scor 40
Compilator cpp Status done
Runda Simulare 15b Marime 1.06 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream fin ("permutari2.in"); ofstream fout ("permutari2.out");

const int nmax = 300;
const int mod = 10007;
int d[ 2 ][nmax + 1][nmax + 1];

int main() {
    int n, p;
    fin >> n >> p;

    d[ 0 ][ 0 ][ 0 ] = 1;
    int ind = 0;
    for (int i = 0; i < n; ++ i, ind = 1 - ind) {
        memset(d[1 - ind], 0, sizeof(d[1 - ind]));

        for (int j = i; j <= n; ++ j) {
            for (int k = 0; k <= i && k <= p; ++ k) {
                int u = k;
                if (i + 1 == j) ++ u;
                d[1 - ind][ j ][ u ] += (j - i) * d[ ind ][ j ][ k ];
                d[1 - ind][ j ][ u ] %= mod;

                for (int x = j + 1; x <= n; ++ x) {
                    u = k;
                    if (i + 1 == x) ++ u;

                    d[1 - ind][ x ][ u ] += d[ ind ][ j ][ k ];
                    if (d[1 - ind][ x ][ u ] >= mod) d[1 - ind][ x ][ u ] -= mod;
                }
            }
        }
    }

    fout << d[ ind ][ n ][ p ] << "\n";

    fin.close();
    fout.close();
    return 0;
}