#include <bits/stdc++.h> using namespace std; const int N = 5005; const int mod = 1e9 + 7; int add(int a, int b) { a += b; return a < mod ? a : a - mod; } int sub(int a, int b) { a -= b; return a < 0 ? a + mod : a; } int mul(int a, int b) { return int((long long) a * b % mod); } int pot(int a, int b) { int r = 1; for(; b; b >>= 1, a = mul(a, a)) if(b & 1) r = mul(r, a); return r; } void add(int *a, int b) { *a += b; if((*a) >= mod) (*a) -= mod; } int n; int a[N]; int dp[2][N]; int main() { scanf("%d", &n); for(int i = 1; i <= n; i++) { scanf("%d", a + i); } sort(a + 1, a + n + 1); dp[0][0] = 1; for(int i = 1; i <= n; i++) { for(int j = 0; j < N; j++) dp[i & 1][j] = dp[i & 1 ^ 1][j]; for(int j = a[i] - 1; j <= N - 1; j++) add(&dp[i & 1][min(j + a[i], N - 1)], dp[i & 1 ^ 1][j]); } int ans = 0; for(int i = 1; i < N; i++) add(&ans, dp[n & 1][i]); printf("%d\n", ans); }
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 | #include <bits/stdc++.h> using namespace std; const int N = 5005; const int mod = 1e9 + 7; int add(int a, int b) { a += b; return a < mod ? a : a - mod; } int sub(int a, int b) { a -= b; return a < 0 ? a + mod : a; } int mul(int a, int b) { return int((long long) a * b % mod); } int pot(int a, int b) { int r = 1; for(; b; b >>= 1, a = mul(a, a)) if(b & 1) r = mul(r, a); return r; } void add(int *a, int b) { *a += b; if((*a) >= mod) (*a) -= mod; } int n; int a[N]; int dp[2][N]; int main() { scanf("%d", &n); for(int i = 1; i <= n; i++) { scanf("%d", a + i); } sort(a + 1, a + n + 1); dp[0][0] = 1; for(int i = 1; i <= n; i++) { for(int j = 0; j < N; j++) dp[i & 1][j] = dp[i & 1 ^ 1][j]; for(int j = a[i] - 1; j <= N - 1; j++) add(&dp[i & 1][min(j + a[i], N - 1)], dp[i & 1 ^ 1][j]); } int ans = 0; for(int i = 1; i < N; i++) add(&ans, dp[n & 1][i]); printf("%d\n", ans); } |