#include<bits/stdc++.h> using namespace std; int d [5001][5001]; int n; long long numbers[5001]; int run(long long* numbers, int t) { for (int j = 0; j <= n; ++j) { d[0][j] = 1; } for (int i = 1; i <= t; i++) { for (int j = 1; j <= n; j++) { int number = numbers[j - 1]; d[i][j] = 0; d[i][j] += d[i][j - 1]; if (i - number >= 0) { d[i][j] += d[i - number][j - 1]; } } } // cerr<<"d"<<endl; // for(int i=0;i<10;i++) // { // for(int j=0;j<10;j++) // { // cerr<<setw(4)<<d[i][j]; // } // cerr<<endl; // } } int p = 1000000007; int main() { cin>>n; for(int i=0;i<n;i++) { cin>>numbers[i]; } sort(numbers,numbers+n); //for(int i=0;i<n;i++) // cout<<numbers[i]<<" "; //cout<<endl; run(numbers,9); int sum = 0 ; for(int i=0;i<n;i++) { // cerr<<i<<" "<<numbers[i]<<" "<<d[numbers[i]][i+1]<<endl;; // cerr<<d[7][5]<<endl; // cerr<<d[5][7]<<endl; sum = (sum + (d[numbers[i]][i+1])%p )%p; } cout << sum<<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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include<bits/stdc++.h> using namespace std; int d [5001][5001]; int n; long long numbers[5001]; int run(long long* numbers, int t) { for (int j = 0; j <= n; ++j) { d[0][j] = 1; } for (int i = 1; i <= t; i++) { for (int j = 1; j <= n; j++) { int number = numbers[j - 1]; d[i][j] = 0; d[i][j] += d[i][j - 1]; if (i - number >= 0) { d[i][j] += d[i - number][j - 1]; } } } // cerr<<"d"<<endl; // for(int i=0;i<10;i++) // { // for(int j=0;j<10;j++) // { // cerr<<setw(4)<<d[i][j]; // } // cerr<<endl; // } } int p = 1000000007; int main() { cin>>n; for(int i=0;i<n;i++) { cin>>numbers[i]; } sort(numbers,numbers+n); //for(int i=0;i<n;i++) // cout<<numbers[i]<<" "; //cout<<endl; run(numbers,9); int sum = 0 ; for(int i=0;i<n;i++) { // cerr<<i<<" "<<numbers[i]<<" "<<d[numbers[i]][i+1]<<endl;; // cerr<<d[7][5]<<endl; // cerr<<d[5][7]<<endl; sum = (sum + (d[numbers[i]][i+1])%p )%p; } cout << sum<<endl; } |