1 #include<iostream> 2 using namespace std; 3 4 int n, m; 5 const int mod = 9999973; 6 7 inline long long mul(long long x, long long y) 8 { 9 long long res = 0; 10 while (y) 11 { 12 if (y & 1)res = (res + x) % mod; 13 x = (x << 1) % mod; y >>= 1; 14 } 15 return res; 16 } 17 18 19 long long int f[110][110][110]; 20 21 int main() 22 { 23 cin >> n >> m; 24 f[0][0][0] = 1; 25 for (int i = 1; i <= n; i++) 26 { 27 for (int j = 0; j <= m; j++) 28 { 29 for (int k = 0; k <= m - j; k++) 30 { 31 f[i][j][k] = f[i - 1][j][k]; 32 if (k >= 1) f[i][j][k] += mul(f[i - 1][j + 1][k - 1], 1LL + j); 33 if (j >= 1) f[i][j][k] += mul(f[i - 1][j - 1][k], 1LL + m - j - k); 34 if (k >= 2) f[i][j][k] += mul(f[i - 1][j + 2][k - 2], mul((j + 2LL), (j + 1LL)) / 2); 35 if (k >= 1) f[i][j][k] += mul(mul(f[i - 1][j][k - 1], j), (1LL + m - j - k)); 36 if (j >= 2) f[i][j][k] += mul(f[i - 1][j - 2][k], (2LL + m - j - k) * (1LL + m - j - k) / 2 % mod); 37 f[i][j][k] %= mod; 38 } 39 } 40 } 41 long long int sum = 0; 42 for (int i = 0; i <= m; i++) 43 for (int j = 0; j <= m; j++) 44 { 45 sum += f[n][i][j]; 46 sum %= mod; 47 } 48 cout << sum; 49 }
【神奇的DP】P2051 [AHOI2009]中国象棋
猜你喜欢
转载自www.cnblogs.com/thjkhdf12/p/11641164.html
今日推荐
周排行