#include<bits/stdc++.h>
#define lim 5009
using namespace std;
typedef unsigned int uint;
const int md = 1000000007;
const int l = 5000;
long long t[lim];
int n;
vector<int> v;
int main()
{
scanf("%d", &n);
t[0] = 1;
for(int i = 0;i<n;++i)
{
int a;
scanf("%d", &a);
v.push_back(a);
}
sort(v.begin(),v.end());
for(uint i = 0;i<v.size();++i)
{
int m = min(v[i]-1,l-v[i]+1);//////
for(int j = 0;j<=m;++j)
{
t[l] = (t[l]+t[l-j])%md;
}
m = 2*v[i]-1;
for(int j = l;j>=m;--j)
{
t[j] = (t[j]+t[j-v[i]])%md;
}
}
long long wyn = 0;
for(int i = 1;i<=l;++i)
{
wyn = (wyn+t[i])%md;
}
printf("%lld\n", wyn);
}
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 40 41 42 43 | #include<bits/stdc++.h> #define lim 5009 using namespace std; typedef unsigned int uint; const int md = 1000000007; const int l = 5000; long long t[lim]; int n; vector<int> v; int main() { scanf("%d", &n); t[0] = 1; for(int i = 0;i<n;++i) { int a; scanf("%d", &a); v.push_back(a); } sort(v.begin(),v.end()); for(uint i = 0;i<v.size();++i) { int m = min(v[i]-1,l-v[i]+1);////// for(int j = 0;j<=m;++j) { t[l] = (t[l]+t[l-j])%md; } m = 2*v[i]-1; for(int j = l;j>=m;--j) { t[j] = (t[j]+t[j-v[i]])%md; } } long long wyn = 0; for(int i = 1;i<=l;++i) { wyn = (wyn+t[i])%md; } printf("%lld\n", wyn); } |
English