Skip to content

Commit d853f73

Browse files
authored
Update Solution.cpp
1 parent 35e6972 commit d853f73

File tree

1 file changed

+33
-25
lines changed
  • solution/2300-2399/2338.Count the Number of Ideal Arrays

1 file changed

+33
-25
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,38 @@
11
class Solution {
22
public:
3-
int m, n;
4-
const int mod = 1e9 + 7;
5-
vector<vector<int>> f;
6-
vector<vector<int>> c;
7-
83
int idealArrays(int n, int maxValue) {
9-
this->m = maxValue;
10-
this->n = n;
11-
f.assign(maxValue + 1, vector<int>(16, -1));
12-
c.assign(n, vector<int>(16, 0));
13-
for (int i = 0; i < n; ++i)
14-
for (int j = 0; j <= i && j < 16; ++j)
15-
c[i][j] = !j ? 1 : (c[i - 1][j] + c[i - 1][j - 1]) % mod;
16-
int ans = 0;
17-
for (int i = 1; i <= m; ++i) ans = (ans + dfs(i, 1)) % mod;
18-
return ans;
19-
}
4+
const int mod = 1e9 + 7;
5+
vector<vector<int>> c(n, vector<int>(16));
6+
for (int i = 0; i < n; ++i) {
7+
for (int j = 0; j <= i && j < 16; ++j) {
8+
if (j == 0) {
9+
c[i][j] = 1;
10+
} else {
11+
c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;
12+
}
13+
}
14+
}
15+
16+
vector<vector<long long>> f(maxValue + 1, vector<long long>(16));
17+
for (int i = 1; i <= maxValue; ++i) {
18+
f[i][1] = 1;
19+
}
2020

21-
int dfs(int i, int cnt) {
22-
if (f[i][cnt] != -1) return f[i][cnt];
23-
int res = c[n - 1][cnt - 1];
24-
if (cnt < n)
25-
for (int k = 2; k * i <= m; ++k)
26-
res = (res + dfs(k * i, cnt + 1)) % mod;
27-
f[i][cnt] = res;
28-
return res;
21+
for (int j = 1; j < 15; ++j) {
22+
for (int i = 1; i <= maxValue; ++i) {
23+
for (int k = 2; k * i <= maxValue; ++k) {
24+
f[k * i][j + 1] = (f[k * i][j + 1] + f[i][j]) % mod;
25+
}
26+
}
27+
}
28+
29+
long long ans = 0;
30+
for (int i = 1; i <= maxValue; ++i) {
31+
for (int j = 1; j < 16; ++j) {
32+
ans = (ans + f[i][j] * c[n - 1][j - 1]) % mod;
33+
}
34+
}
35+
36+
return ans;
2937
}
30-
};
38+
};

0 commit comments

Comments
 (0)