Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- const int MOD = 1e9 + 7;
- int main(){
- int n;
- cin >> n;
- vector<int> a(n + 1);
- for (int i = 1; i <= n; i++){
- cin >> a[i];
- }
- sort(a.begin() + 1, a.end());
- vector<vector<pair<int, int>>> dp(n + 1, vector<pair<int, int>> (4002));
- for (int i = 1; i <= n; i++){
- for (int j = i + 1; j <= n; j++){
- dp[j][min(a[i] + a[j], 4001)].first += 1;
- }
- }
- for (int i = 1; i < n; i++){
- for (int j = 1; j <= 4001; j++){
- dp[i + 1][j].first = (dp[i + 1][j].first + dp[i][j].first) % MOD;
- dp[i + 1][j].second = (dp[i + 1][j].second + dp[i][j].second) % MOD;
- if (a[i + 1] < j){
- int jj = min(4001, j + a[i + 1]);
- dp[i + 1][jj].second = (dp[i + 1][jj].second + dp[i][j].first) % MOD;
- dp[i + 1][jj].second = (dp[i + 1][jj].second + dp[i][j].second) % MOD;
- }
- }
- }
- int summ = 0;
- for (int i = 1; i <= 4001; i++){
- summ = (summ + dp[n][i].second) % MOD;
- }
- cout << summ;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement