Advertisement
arfin97

Timus: Stone Pile (All possible Combination)

Jul 25th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define d(x)                cout << #x << " = " << (x) << endl;
  4. #define fr                  freopen("in.txt", "r", stdin);
  5. #define fw                  freopen("out.txt", "w", stdout);
  6. #define mem(x)              memset((x), 0, sizeof((x)));
  7. #define pb                  push_back
  8. #define LL                  long long
  9. #define fastIO              ios_base::sync_with_stdio(false)
  10. #define sf                  scanf
  11. #define pf                  printf
  12. #define SQR(x)              ((x)*(x))
  13. #define sc1(x)              scanf("%d", &x)
  14. #define sc2(x, y)           scanf("%d %d", &x, &y)
  15. #define sc3(x, y, z)        scanf("%d %d %d", &x, &y, &z)
  16. #define FOR(i, x, y)        for(int i=int(x); i<int(y); i++)
  17. #define ROF(i, x, y)        for(int i=int(x-1); i>=int(y); i--)
  18. #define all(c)              (c.begin(), c.end())
  19. #define unq(v)              sort(all(v)), (v).erase(unique(all(v)),v.end())
  20. #define siz 100000
  21. #define EPSILON    (1.0E-8)
  22.  
  23. int n;
  24. int whole_sum = 0;
  25. int mini = INT_MAX;
  26. int ara[siz];
  27. int ans[siz];
  28. int used[siz];
  29.  
  30. int bt(int pos, int j, int x){
  31.     if(pos == x){
  32.         int sum = 0;
  33.         for(int i = 0; i < x; i++) sum += ans[i];
  34.         int temp = abs((whole_sum-sum)-sum);
  35.         if(temp < mini) mini = temp;
  36.         // for(int i = 0; i < x; i++) cout << ans[i] << " ";
  37.         // cout << endl;
  38.         return 0;
  39.     }
  40.     for(int i = j; i < n; i++){
  41.         if(used[i] == 0){
  42.             used[i] = 1;
  43.             ans[pos] = ara[i];
  44.             bt(pos+1, i, x);
  45.             used[i] = 0;
  46.         }
  47.     }
  48. }
  49.  
  50. int main(){
  51.     #ifndef ONLINE_JUDGE
  52.         clock_t tStart = clock();
  53.         freopen("in.txt", "r", stdin);
  54.         freopen("out.txt", "w", stdout);
  55.     #endif
  56.  
  57.         cin >> n;
  58.         for(int i = 0; i < n; i++){
  59.             cin >> ara[i];
  60.             whole_sum += ara[i];
  61.         }
  62.  
  63.         for(int i = 1; i <= n; i++){
  64.             mem(ans);
  65.             mem(used);
  66.             bt(0, 0, i);
  67.         }
  68.         cout << mini << endl;
  69.        
  70.  
  71.     #ifndef ONLINE_JUDGE
  72.         printf("\n>>Time taken: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC);
  73.     #endif
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement