#include <bits/stdc++.h> #define qio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) #define debug(x) cerr<<#x<<" "<<x<<endl #define ll long long #define st first #define nd second using namespace std; ll n, t, dp[5005], tab[5005], res, modi = 1e9 + 7, maxx; int main() { qio; cin >> n; for (int i = 1; i <= n; i++) { cin >> tab[i]; maxx = max(tab[i], maxx); } sort(tab + 1, tab + n + 1); dp[0] = 1; for (int i = 1; i <= n; i++) { for (int j = maxx; j >= tab[i] - 1; j--) { dp[min(j + tab[i], maxx)] = (dp[min(j + tab[i], maxx)] + dp[j]) % modi; } } for (int i = 1; i <= maxx; i++) { res = (res + dp[i]) % modi; } cout << res << endl; }
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 | #include <bits/stdc++.h> #define qio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) #define debug(x) cerr<<#x<<" "<<x<<endl #define ll long long #define st first #define nd second using namespace std; ll n, t, dp[5005], tab[5005], res, modi = 1e9 + 7, maxx; int main() { qio; cin >> n; for (int i = 1; i <= n; i++) { cin >> tab[i]; maxx = max(tab[i], maxx); } sort(tab + 1, tab + n + 1); dp[0] = 1; for (int i = 1; i <= n; i++) { for (int j = maxx; j >= tab[i] - 1; j--) { dp[min(j + tab[i], maxx)] = (dp[min(j + tab[i], maxx)] + dp[j]) % modi; } } for (int i = 1; i <= maxx; i++) { res = (res + dp[i]) % modi; } cout << res << endl; } |