Advertisement
Sitleman

Untitled

Nov 15th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. const int MOD = 1e9 + 7;
  7.  
  8. int main(){
  9. int n;
  10. cin >> n;
  11. vector<int> a(n + 1);
  12. for (int i = 1; i <= n; i++){
  13. cin >> a[i];
  14. }
  15. sort(a.begin() + 1, a.end());
  16. vector<vector<pair<int, int>>> dp(n + 1, vector<pair<int, int>> (4002));
  17. for (int i = 1; i <= n; i++){
  18. for (int j = i + 1; j <= n; j++){
  19. dp[j][min(a[i] + a[j], 4001)].first += 1;
  20. }
  21. }
  22. for (int i = 1; i < n; i++){
  23. for (int j = 1; j <= 4001; j++){
  24. dp[i + 1][j].first = (dp[i + 1][j].first + dp[i][j].first) % MOD;
  25. dp[i + 1][j].second = (dp[i + 1][j].second + dp[i][j].second) % MOD;
  26. if (a[i + 1] < j){
  27. int jj = min(4001, j + a[i + 1]);
  28. dp[i + 1][jj].second = (dp[i + 1][jj].second + dp[i][j].first) % MOD;
  29. dp[i + 1][jj].second = (dp[i + 1][jj].second + dp[i][j].second) % MOD;
  30. }
  31. }
  32. }
  33. int summ = 0;
  34. for (int i = 1; i <= 4001; i++){
  35. summ = (summ + dp[n][i].second) % MOD;
  36. }
  37. cout << summ;
  38. return 0;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement