1
+ /* *
2
+ * @file 2066D1.cpp
3
+ * @author Macesuted ([email protected] )
4
+ * @date 2025-02-11
5
+ *
6
+ * @copyright Copyright (c) 2025
7
+ *
8
+ */
9
+
10
+ #include < bits/stdc++.h>
11
+ using namespace std ;
12
+
13
+ #ifndef LOCAL
14
+ #define endl ' \n '
15
+ #endif
16
+
17
+ bool mem1;
18
+
19
+ #define maxn 105
20
+ #define maxm 10005
21
+ #define mod 1'000'000'007
22
+
23
+ int a[maxm], f[maxn][maxm];
24
+ int64_t fac[maxm], ifac[maxm];
25
+
26
+ int64_t qpow (int64_t a, int64_t x) {
27
+ int64_t ans = 1 ;
28
+ while (x) {
29
+ if (x & 1 ) ans = ans * a % mod;
30
+ a = a * a % mod, x >>= 1 ;
31
+ }
32
+ return ans;
33
+ }
34
+ int64_t inv (int64_t a) { return qpow (a, mod - 2 ); }
35
+
36
+ int Mod (int x) { return x >= mod ? x - mod : x; }
37
+
38
+ int64_t C (int n, int m) { return fac[n] * ifac[m] % mod * ifac[n - m] % mod; }
39
+
40
+ void solve (void ) {
41
+ int n, c, m;
42
+ cin >> n >> c >> m;
43
+ for (int i = 1 ; i <= m; i++) cin >> a[i];
44
+
45
+ for (int i = 1 ; i <= n; i++)
46
+ for (int j = 1 ; j <= m; j++) f[i][j] = 0 ;
47
+
48
+ f[n][c] = 1 ;
49
+ for (int i = n - 1 ; i >= 1 ; i--)
50
+ for (int j = c; j <= m; j++)
51
+ if (f[i + 1 ][j])
52
+ for (int k = 0 ; k <= min (m - j, c); k++) f[i][j + k] = (f[i][j + k] + f[i + 1 ][j] * C (c, k)) % mod;
53
+
54
+ cout << f[1 ][m] << endl;
55
+
56
+ return ;
57
+ }
58
+
59
+ bool mem2;
60
+
61
+ int main () {
62
+ ios::sync_with_stdio (false ), cin.tie (nullptr );
63
+ #ifdef LOCAL
64
+ cerr << " Memory Cost: " << abs (&mem1 - &mem2) / 1024 . / 1024 . << " MB" << endl;
65
+ #endif
66
+
67
+ fac[0 ] = ifac[0 ] = 1 ;
68
+ for (int i = 1 ; i < maxm; i++) fac[i] = fac[i - 1 ] * i % mod;
69
+ ifac[maxm - 1 ] = inv (fac[maxm - 1 ]);
70
+ for (int i = maxm - 2 ; i; i--) ifac[i] = ifac[i + 1 ] * (i + 1 ) % mod;
71
+
72
+ int _ = 1 ;
73
+ cin >> _;
74
+ while (_--) solve ();
75
+
76
+ #ifdef LOCAL
77
+ cerr << " Time Cost: " << clock () * 1000 . / CLOCKS_PER_SEC << " MS" << endl;
78
+ #endif
79
+ return 0 ;
80
+ }
0 commit comments