#include<bits/stdc++.h>
using namespace std;
const int N=5005, mod=1e9+7;
int tab[N][N];
int main(){
tab[0][0]=1;
int n;
cin>>n;
vector<int> V(n);
for(int &i:V)cin>>i;
sort(V.begin(), V.end());
for(int i=0; i<n; ++i){
for(int j=V[i]-1; j<N; j++){
if(j+V[i]>N-1)tab[i+1][N-1]=(tab[i+1][N-1]+tab[i][j])%mod;
else tab[i+1][j+V[i]]+=(tab[i+1][j+V[i]]+tab[i][j])%mod;
}
for(int j=0; j<N; j++){
tab[i+1][j]=(tab[i+1][j]+tab[i][j])%mod;
}
}
long long ans=0;
for(int i=0; i<N; i++){
ans+=tab[n][i];
}
cout<<(ans+mod-1)%mod;
}
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 | #include<bits/stdc++.h> using namespace std; const int N=5005, mod=1e9+7; int tab[N][N]; int main(){ tab[0][0]=1; int n; cin>>n; vector<int> V(n); for(int &i:V)cin>>i; sort(V.begin(), V.end()); for(int i=0; i<n; ++i){ for(int j=V[i]-1; j<N; j++){ if(j+V[i]>N-1)tab[i+1][N-1]=(tab[i+1][N-1]+tab[i][j])%mod; else tab[i+1][j+V[i]]+=(tab[i+1][j+V[i]]+tab[i][j])%mod; } for(int j=0; j<N; j++){ tab[i+1][j]=(tab[i+1][j]+tab[i][j])%mod; } } long long ans=0; for(int i=0; i<N; i++){ ans+=tab[n][i]; } cout<<(ans+mod-1)%mod; } |
English