/**
* author: NimaAryan
* created: 2024-06-26 20:39:48
**/
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include "algo/debug.h"
#endif
using i64 = long long;
constexpr i64 mod = 1E9 + 7;
void add(i64& x, i64 y) {
if ((x += y) >= mod) {
x -= mod;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, L;
cin >> N >> L;
vector<int> A(N);
for (int i = 0; i < N; ++i) {
cin >> A[i];
}
if (N == 1) {
cout << 1 << "\n";
return 0;
}
sort(A.begin(), A.end());
int M = max(accumulate(A.begin(), A.end(), 0) / 2 + 100, 2 * A[0] + 5);
int T = M + 1 + L;
vector f(3, vector(N + 1, vector<i64>(T + 1)));
f[0][1][0] = 1;
f[1][1][-A[0] + M] = 2;
f[2][1][2 * -A[0] + M] = 1;
for (int i = 1; i < N; ++i) {
vector g(3, vector(N + 1, vector<i64>(T + 1)));
for (int c = 1; c <= N; ++c) {
for (int s = 0; s <= T; ++s) {
if (c + 1 <= N && s - 2 * A[i] >= 0) {
add(g[0][c + 1][s - 2 * A[i]], f[0][c][s] * max(0, c - 1) % mod);
add(g[1][c + 1][s - 2 * A[i]], f[1][c][s] * c % mod);
add(g[2][c + 1][s - 2 * A[i]], f[2][c][s] * (c + 1) % mod);
}
add(g[0][c][s], f[0][c][s] * max(0, 2 * c - 2) % mod);
add(g[1][c][s], f[1][c][s] * max(0, 2 * c - 1) % mod);
add(g[2][c][s], f[2][c][s] * 2 * c % mod);
if (c + 1 <= N && s - A[i] >= 0) {
add(g[0][c + 1][s - A[i]], f[1][c][s]);
add(g[1][c + 1][s - A[i]], f[2][c][s] * 2 % mod);
}
if (s + A[i] <= T) {
add(g[0][c][s + A[i]], f[1][c][s]);
add(g[1][c][s + A[i]], f[2][c][s] * 2 % mod);
}
if (c - 1 >= 0 && s + 2 * A[i] <= T) {
add(g[0][c - 1][s + 2 * A[i]], f[0][c][s] * max(0, c - 1) % mod);
add(g[1][c - 1][s + 2 * A[i]], f[1][c][s] * max(0, c - 1) % mod);
add(g[2][c - 1][s + 2 * A[i]], f[2][c][s] * max(0, c - 1) % mod);
}
}
}
f.swap(g);
}
i64 ans = 0;
for (int l = 0; l <= L; ++l) {
add(ans, f[0][1][l + M]);
}
cout << ans << "\n";
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
1 ms |
348 KB |
Output is correct |
5 |
Correct |
4 ms |
2084 KB |
Output is correct |
6 |
Correct |
3 ms |
1732 KB |
Output is correct |
7 |
Correct |
1 ms |
604 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
3 ms |
1564 KB |
Output is correct |
10 |
Correct |
1 ms |
604 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
2 ms |
860 KB |
Output is correct |
3 |
Correct |
1 ms |
856 KB |
Output is correct |
4 |
Correct |
2 ms |
860 KB |
Output is correct |
5 |
Correct |
2 ms |
856 KB |
Output is correct |
6 |
Correct |
2 ms |
604 KB |
Output is correct |
7 |
Correct |
1 ms |
604 KB |
Output is correct |
8 |
Correct |
1 ms |
604 KB |
Output is correct |
9 |
Correct |
1 ms |
600 KB |
Output is correct |
10 |
Correct |
2 ms |
860 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
1 ms |
348 KB |
Output is correct |
5 |
Correct |
4 ms |
2084 KB |
Output is correct |
6 |
Correct |
3 ms |
1732 KB |
Output is correct |
7 |
Correct |
1 ms |
604 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
3 ms |
1564 KB |
Output is correct |
10 |
Correct |
1 ms |
604 KB |
Output is correct |
11 |
Correct |
1 ms |
348 KB |
Output is correct |
12 |
Correct |
2 ms |
860 KB |
Output is correct |
13 |
Correct |
1 ms |
856 KB |
Output is correct |
14 |
Correct |
2 ms |
860 KB |
Output is correct |
15 |
Correct |
2 ms |
856 KB |
Output is correct |
16 |
Correct |
2 ms |
604 KB |
Output is correct |
17 |
Correct |
1 ms |
604 KB |
Output is correct |
18 |
Correct |
1 ms |
604 KB |
Output is correct |
19 |
Correct |
1 ms |
600 KB |
Output is correct |
20 |
Correct |
2 ms |
860 KB |
Output is correct |
21 |
Correct |
16 ms |
1692 KB |
Output is correct |
22 |
Correct |
404 ms |
12516 KB |
Output is correct |
23 |
Execution timed out |
2045 ms |
155260 KB |
Time limit exceeded |
24 |
Halted |
0 ms |
0 KB |
- |