Advertisement
Nita_Cristian

concurs

Feb 6th, 2020
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define maxim 16843009
  3. using namespace std;
  4.  
  5. int n, v[1001], s[1001], suma_max, x, y, ap[1001];
  6.  
  7. void reconstituire(int suma)
  8. {
  9.     stack<int> elemente;
  10.  
  11.     for(int i = suma; i != 0; i = (i-v[s[i]]))
  12.         if(ap[s[i]] == 0)
  13.         elemente.push(s[i]), ap[s[i]] = 1;
  14.  
  15.     while(!elemente.empty())
  16.         cout << elemente.top() << ' ', elemente.pop();
  17.  
  18.     cout << '\n';
  19. }
  20.  
  21. int main()
  22. {
  23.     freopen("concurs.in", "r", stdin);
  24.     freopen("concurs.out", "w", stdout);
  25.  
  26.     cin >> n;
  27.     for(int i = 1; i <= n; i++)
  28.         cin >> v[i], suma_max += v[i]; /// citesc elementele si gasesc suma maxima
  29.  
  30.     memset(s, 1, sizeof(s)); /// initializez array-ul de suma
  31.     s[0] = 0;
  32.  
  33.     for(int i = 1; i <= n; i++)/// parcurg fiecare element
  34.         for(int j = 0; j <= suma_max-v[i]; j++) /// parcurg fiecare suma de la 0 la suma_max - elementul deoarece nu vreau sa formez o suma mai mare
  35.             if(s[j] < i)/// daca indicele elementului cu care am format suma este mai mic decat indicele curent
  36.                 s[j+v[i]] = i; /// formez suma dintre element si indice
  37.  
  38.     x = suma_max/2; /// caut sumele de mijloc
  39.     y = suma_max/2;
  40.  
  41.     while(s[x] == maxim) /// cat timp nu pot forma suma x
  42.         x--; /// scad x si caut o suma mai mica
  43.  
  44. //    while(s[y] == maxim) /// cat timp nu pot forma suma y
  45. //        y++; /// cresc y si caut o suma mai mare pe care o pot forma
  46.     y = suma_max - x;
  47.  
  48.  
  49.     cout << x << '\n';
  50.     reconstituire(x);
  51.  
  52.     cout << y << '\n';
  53.     reconstituire(y);
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement