#include<bits/stdc++.h>
using namespace std;
#define fr first
#define sc seconds
using ll=long long;
using pii=pair<int,int>;
const int R=5000,mod=1e9+7;
ll dp[R+6];
int sum[R+6];
vector<int>tab;
ll il[R+6],dod[R+6];
int main()
{
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int n;cin>>n;
for(int i=1;i<=n;i++)
{
int a;cin>>a;
tab.push_back(a);
}
sort(tab.begin(),tab.end());
if(tab[0]!=1)
{
cout<<0;
return 0;
}
for(int i=1;i<=n;i++)
{
int a=tab[i-1];
if(sum[i-1]<a-1)
{
dp[n]=dp[i-1];
break;
}
sum[i]=sum[i-1]+a;
ll add=0;
ll d500=0;
for(int j=a-1;j<=R;j++)
{
if(j<min(R,a-1+a)){il[j]+=dod[j];dod[j]=0;}
il[j]%=mod;
add+=il[j];
int id=j+a;
if(id>=R)
{
d500+=il[j];
d500%=mod;
continue;
}
il[id]+=dod[id];
dod[id]=il[j];
il[id]%=mod;
add%=mod;
}
il[R]+=d500;
il[R]%=mod;
if(a==1){add++;il[1]++;}
dp[i]=(dp[i-1]+add)%mod;
}
cout<<dp[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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include<bits/stdc++.h> using namespace std; #define fr first #define sc seconds using ll=long long; using pii=pair<int,int>; const int R=5000,mod=1e9+7; ll dp[R+6]; int sum[R+6]; vector<int>tab; ll il[R+6],dod[R+6]; int main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n;cin>>n; for(int i=1;i<=n;i++) { int a;cin>>a; tab.push_back(a); } sort(tab.begin(),tab.end()); if(tab[0]!=1) { cout<<0; return 0; } for(int i=1;i<=n;i++) { int a=tab[i-1]; if(sum[i-1]<a-1) { dp[n]=dp[i-1]; break; } sum[i]=sum[i-1]+a; ll add=0; ll d500=0; for(int j=a-1;j<=R;j++) { if(j<min(R,a-1+a)){il[j]+=dod[j];dod[j]=0;} il[j]%=mod; add+=il[j]; int id=j+a; if(id>=R) { d500+=il[j]; d500%=mod; continue; } il[id]+=dod[id]; dod[id]=il[j]; il[id]%=mod; add%=mod; } il[R]+=d500; il[R]%=mod; if(a==1){add++;il[1]++;} dp[i]=(dp[i-1]+add)%mod; } cout<<dp[n]; } |
English