#include <bits/stdc++.h>
using namespace std;
const uint mod = 1e9 + 7;
uint M(uint x) { return x >= mod ? x - mod : x; }
int main()
{
ios::sync_with_stdio(false); cin.tie(nullptr);
size_t n;
cin >> n;
uint m = 0;
vector<uint> A(n);
for(auto& a : A)
cin >> a, m = max(a, m);
sort(A.begin(), A.end());
vector<uint> P(m), Q(m);
P[0] = 1;
for(auto a : A)
{
copy(P.begin(), P.end(), Q.begin());
for(uint z = a-1; z < m; z++)
{
auto zz = min(a+z, m-1);
Q[zz] += P[z]; Q[zz] = M(Q[zz]);
}
swap(P, Q);
}
uint result = 0;
for(uint z = 0; z < m; z++)
result += P[z], result = M(result);
cout << result - 1 << '\n';
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <bits/stdc++.h> using namespace std; const uint mod = 1e9 + 7; uint M(uint x) { return x >= mod ? x - mod : x; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); size_t n; cin >> n; uint m = 0; vector<uint> A(n); for(auto& a : A) cin >> a, m = max(a, m); sort(A.begin(), A.end()); vector<uint> P(m), Q(m); P[0] = 1; for(auto a : A) { copy(P.begin(), P.end(), Q.begin()); for(uint z = a-1; z < m; z++) { auto zz = min(a+z, m-1); Q[zz] += P[z]; Q[zz] = M(Q[zz]); } swap(P, Q); } uint result = 0; for(uint z = 0; z < m; z++) result += P[z], result = M(result); cout << result - 1 << '\n'; } |
English