#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; } |