Pagini recente » Cod sursa (job #1773942) | Borderou de evaluare (job #1036651) | Cod sursa (job #2285353) | Cod sursa (job #2443990) | Cod sursa (job #1993629)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("permutari2.in"); ofstream fout ("permutari2.out");
const int nmax = 300;
const int mod = 10007;
int e[nmax + 1], fact[nmax + 1];
int d[ 2 ][nmax + 1];
int main() {
int n, p;
fin >> n >> p;
fact[ 0 ] = 1;
for (int i = 1; i <= n; ++ i) fact[ i ] = fact[i - 1] * i % mod;
e[ 1 ] = 1;
for (int i = 2; i <= n; ++ i) {
e[ i ] = fact[ i ];
for (int j = 1; j < i; ++ j) {
e[ i ] -= e[ j ] * fact[i - j] % mod;
if (e[ i ] < 0) e[ i ] += mod;
}
}
d[ 0 ][ 0 ] = 1;
int ind = 1;
for (int i = 1; i <= p; ++ i, ind = 1 - ind) {
memset(d[ ind ], 0, sizeof(d[ ind ]));
for (int j = i; j <= n; ++ j) {
for (int k = 0; k < j; ++ k) {
d[ ind ][ j ] = (d[ ind ][ j ] + d[1 - ind][ k ] * e[j - k]) % mod;
}
}
}
fout << d[1 - ind][ n ] << "\n";
fin.close();
fout.close();
return 0;
}