#include <bits/stdc++.h> typedef long long ll; using namespace std; ll dp[5005]; ll tab[5005]; int n, maxv, toop; ll res; const ll mod = 1000000007; int main() { scanf("%d", &n); for(int i = 1; i<=n; i++) { scanf("%lld", &tab[i]); toop = max(toop, (int)tab[i]); } sort(tab + 1, tab + n + 1); dp[0] = 1; maxv = 0; for(int i = 1; i<=n; i++) { for(int m = maxv; m>=tab[i] - 1; m--) { int temp = min((int)(m + tab[i]), toop); if(dp[m] > 0) { dp[temp]+=dp[m]; dp[temp]%=mod; maxv = max(maxv, min(toop, temp)); } } } for(int i = 1; i<=toop; i++) { res+=dp[i]; res%=mod; } printf("%lld", res); }
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 | #include <bits/stdc++.h> typedef long long ll; using namespace std; ll dp[5005]; ll tab[5005]; int n, maxv, toop; ll res; const ll mod = 1000000007; int main() { scanf("%d", &n); for(int i = 1; i<=n; i++) { scanf("%lld", &tab[i]); toop = max(toop, (int)tab[i]); } sort(tab + 1, tab + n + 1); dp[0] = 1; maxv = 0; for(int i = 1; i<=n; i++) { for(int m = maxv; m>=tab[i] - 1; m--) { int temp = min((int)(m + tab[i]), toop); if(dp[m] > 0) { dp[temp]+=dp[m]; dp[temp]%=mod; maxv = max(maxv, min(toop, temp)); } } } for(int i = 1; i<=toop; i++) { res+=dp[i]; res%=mod; } printf("%lld", res); } |