Advertisement
Foqrul

Ballon Problem

Apr 20th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. input
  2. ------
  3. 3
  4. 7
  5. 45 3 92 8 14 30 7
  6. 10
  7. 1 10 2 9 3 8 4 7 5 6
  8. 10
  9. 2 9 3 8 4 7 5 6 12 11
  10.  
  11.  
  12. output
  13. -------
  14. #1 9898
  15. #2 498
  16. #3 608
  17.  
  18. Code
  19. -----
  20.  
  21. #include <bits/stdc++.h>
  22.  
  23. using namespace std;
  24.  
  25. int n, ballons[100], flag[100], A[100], maxValue, used[100];
  26.  
  27. int left(int x) {
  28.   for (int i = x - 1; i >= 0; i--) {
  29.     if (!used[i])
  30.       return ballons[i];
  31.   }
  32.  
  33.   return 0;
  34. }
  35. int right(int x) {
  36.   for (int i = x + 1; i < n; i++) {
  37.     if (!used[i])
  38.       return ballons[i];
  39.   }
  40.  
  41.   return 0;
  42. }
  43.  
  44. int calculate(int i) {
  45.   int v, l, r;
  46.  
  47.   v = 1;
  48.   l = left(A[i]);
  49.   r = right(A[i]);
  50.  
  51.   if (l > 0)
  52.     v *= l;
  53.   if (r > 0)
  54.     v *= r;
  55.  
  56.   return v;
  57. }
  58.  
  59. void solve(int i, int v) {
  60.   int cv;
  61.   if (i == n) {
  62.     if (v > maxValue)
  63.       maxValue = v - 1;
  64.   }
  65.   else {
  66.     for (int j = 0; j < n; j++) {
  67.       if (!flag[j]) {
  68.         A[i] = j;
  69.  
  70.         flag[j] = 1;
  71.         used[j] = 1;
  72.         cv = calculate(i);
  73.         solve(i + 1, v + cv);
  74.         flag[j] = 0;
  75.         used[j] = 0;
  76.       }
  77.     }
  78.   }
  79. }
  80.  
  81. int main() {
  82.  
  83.   int tc;
  84.   freopen("bal.txt", "r", stdin);
  85.   cin >> tc;
  86.  
  87.   while (tc--) {
  88.     cin >> n;
  89.     for (int i = 0; i < n; i++)
  90.       cin >> ballons[i];
  91.  
  92.     maxValue = 0;
  93.     solve(0, 0);
  94.     cout << maxValue << endl;
  95.   }
  96.  
  97.   return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement