#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
const int N = 3005;
const int MOD = 1e9 + 7;
inline int add(int A,int B){
if(A + B >= MOD) return A + B - MOD;
return A + B;
}
inline int mul(int A,int B){
return (ll)A * B % MOD;
}
inline int sub(int A,int B){
if(A - B < 0) return A - B + MOD;
return A - B;
}
int dp[N][N], inv2 = (MOD + 1) / 2;
int f(int a,int b,int sm = 0){
if(a < 0 || b < 0) return 0;
if(!a) return 1;
if(dp[a][b] != -1) return dp[a][b];
return dp[a][b] = add(add(add(mul(f(a - 2, b - 1), (a - 1) * b), mul(f(a - 1, b - 2), b * (b - 1) / 2)), mul(4 * b, f(a - 1, b - 1))), f(a - 1, b));
}
int main(){
memset(dp, -1, sizeof(dp));
int x, y; scanf("%d%d", &x, &y);
printf("%d\n", sub(f(x, y), 1));
}
Compilation message
tents.cpp: In function 'int main()':
tents.cpp:36:17: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
int x, y; scanf("%d%d", &x, &y);
~~~~~^~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
22 ms |
35584 KB |
Output is correct |
2 |
Correct |
22 ms |
35584 KB |
Output is correct |
3 |
Correct |
22 ms |
35584 KB |
Output is correct |
4 |
Correct |
21 ms |
35712 KB |
Output is correct |
5 |
Correct |
24 ms |
35584 KB |
Output is correct |
6 |
Correct |
21 ms |
35712 KB |
Output is correct |
7 |
Correct |
20 ms |
35584 KB |
Output is correct |
8 |
Correct |
22 ms |
35584 KB |
Output is correct |
9 |
Correct |
22 ms |
35712 KB |
Output is correct |
10 |
Correct |
22 ms |
35712 KB |
Output is correct |
11 |
Correct |
21 ms |
35584 KB |
Output is correct |
12 |
Correct |
23 ms |
35712 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
22 ms |
35584 KB |
Output is correct |
2 |
Correct |
22 ms |
35584 KB |
Output is correct |
3 |
Correct |
22 ms |
35584 KB |
Output is correct |
4 |
Correct |
21 ms |
35712 KB |
Output is correct |
5 |
Correct |
24 ms |
35584 KB |
Output is correct |
6 |
Correct |
21 ms |
35712 KB |
Output is correct |
7 |
Correct |
20 ms |
35584 KB |
Output is correct |
8 |
Correct |
22 ms |
35584 KB |
Output is correct |
9 |
Correct |
22 ms |
35712 KB |
Output is correct |
10 |
Correct |
22 ms |
35712 KB |
Output is correct |
11 |
Correct |
21 ms |
35584 KB |
Output is correct |
12 |
Correct |
23 ms |
35712 KB |
Output is correct |
13 |
Correct |
21 ms |
35712 KB |
Output is correct |
14 |
Correct |
22 ms |
35840 KB |
Output is correct |
15 |
Correct |
153 ms |
35840 KB |
Output is correct |
16 |
Correct |
23 ms |
35584 KB |
Output is correct |
17 |
Correct |
34 ms |
35712 KB |
Output is correct |
18 |
Correct |
54 ms |
35712 KB |
Output is correct |
19 |
Correct |
173 ms |
35840 KB |
Output is correct |
20 |
Correct |
138 ms |
35840 KB |
Output is correct |
21 |
Correct |
88 ms |
35712 KB |
Output is correct |
22 |
Correct |
103 ms |
35840 KB |
Output is correct |
23 |
Correct |
66 ms |
35840 KB |
Output is correct |
24 |
Correct |
244 ms |
35912 KB |
Output is correct |
25 |
Correct |
172 ms |
35840 KB |
Output is correct |
26 |
Correct |
201 ms |
35840 KB |
Output is correct |
27 |
Correct |
245 ms |
35960 KB |
Output is correct |