#include<bits/stdc++.h> #define MOD 1000000007 using namespace std; typedef long long ll; int n; int main() { scanf("%d",&n); vector<int> t(n,0); int ma=0; for(int i=0;i<n;++i) { scanf("%d",&t[i]); ma=max(ma,t[i]); } sort(t.begin(),t.end()); vector<vector<ll>> dp(n,vector<ll>(ma+2,0)); if(t[0]!=1) { printf("0\n"); return 0; } // for(int i=0;i<n;++i) printf("%d ",t[i]); // printf("\n"); dp[0][0]=1; dp[0][1]=1; for(int i=1;i<n;++i) { for(int j=0;j<=ma+1;++j) dp[i][j]=dp[i-1][j]; for(int j=0;j<=ma+1;++j) { if(t[i]<=j+1) { dp[i][min(j+t[i],ma+1)]+=dp[i-1][j]; if(dp[i][min(j+t[i],ma+1)]>=MOD)dp[i][min(j+t[i],ma+1)]-=MOD; } } // for(int j=0;j<=ma+1;++j) printf("%lld ",dp[i][j]); // printf("\n"); } ll w=0; for(int i=1;i<=ma+1;++i) { w+=dp[n-1][i]; if(w>=MOD) w-=MOD; } printf("%lld\n",w); }
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 | #include<bits/stdc++.h> #define MOD 1000000007 using namespace std; typedef long long ll; int n; int main() { scanf("%d",&n); vector<int> t(n,0); int ma=0; for(int i=0;i<n;++i) { scanf("%d",&t[i]); ma=max(ma,t[i]); } sort(t.begin(),t.end()); vector<vector<ll>> dp(n,vector<ll>(ma+2,0)); if(t[0]!=1) { printf("0\n"); return 0; } // for(int i=0;i<n;++i) printf("%d ",t[i]); // printf("\n"); dp[0][0]=1; dp[0][1]=1; for(int i=1;i<n;++i) { for(int j=0;j<=ma+1;++j) dp[i][j]=dp[i-1][j]; for(int j=0;j<=ma+1;++j) { if(t[i]<=j+1) { dp[i][min(j+t[i],ma+1)]+=dp[i-1][j]; if(dp[i][min(j+t[i],ma+1)]>=MOD)dp[i][min(j+t[i],ma+1)]-=MOD; } } // for(int j=0;j<=ma+1;++j) printf("%lld ",dp[i][j]); // printf("\n"); } ll w=0; for(int i=1;i<=ma+1;++i) { w+=dp[n-1][i]; if(w>=MOD) w-=MOD; } printf("%lld\n",w); } |