Pagini recente » Cod sursa (job #2590372) | Cod sursa (job #252542) | Cod sursa (job #1104084) | Cod sursa (job #2470827) | Cod sursa (job #1992088)
#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;
}