#include <bits/stdc++.h> #define st first #define nd second #define pb push_back #define BOOST ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); #define PI 3.14159265359 using namespace std; typedef long long ll; constexpr ll MOD = 1000000007, hot = 29; constexpr ll FOX = 1234567891, cute = 1009; constexpr ll MEGAN = 1000000009, liv = 107; constexpr int MXN = 5000+7 + 10, CZAPA = (1<<20), INF = 1000000000; int n, tab[MXN]; ll dp[MXN]; int main(){ BOOST; cin>> n; for(int i=0; i<n; i++){ cin>> tab[i]; } sort(tab, tab+n); dp[0] = 1; ll ans = 0; for(int i=0; i<n; i++){ int x = tab[i]; int idx = 5000; dp[5001] *= 2; dp[5001] %= MOD; while(idx >= x-1){ if(dp[idx] > 0){ int y = min(idx+x, 5001); dp[y] += dp[idx]; dp[y] %= MOD; } idx--; } } for(int i=1; i<=5001; i++){ ans += dp[i]; ans %= MOD; } cout<< ans%MOD << '\n'; return 0; }
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 | #include <bits/stdc++.h> #define st first #define nd second #define pb push_back #define BOOST ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); #define PI 3.14159265359 using namespace std; typedef long long ll; constexpr ll MOD = 1000000007, hot = 29; constexpr ll FOX = 1234567891, cute = 1009; constexpr ll MEGAN = 1000000009, liv = 107; constexpr int MXN = 5000+7 + 10, CZAPA = (1<<20), INF = 1000000000; int n, tab[MXN]; ll dp[MXN]; int main(){ BOOST; cin>> n; for(int i=0; i<n; i++){ cin>> tab[i]; } sort(tab, tab+n); dp[0] = 1; ll ans = 0; for(int i=0; i<n; i++){ int x = tab[i]; int idx = 5000; dp[5001] *= 2; dp[5001] %= MOD; while(idx >= x-1){ if(dp[idx] > 0){ int y = min(idx+x, 5001); dp[y] += dp[idx]; dp[y] %= MOD; } idx--; } } for(int i=1; i<=5001; i++){ ans += dp[i]; ans %= MOD; } cout<< ans%MOD << '\n'; return 0; } |