Advertisement
a53

VectorDiv_Oficiala

a53
Feb 29th, 2020
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.94 KB | None | 0 0
  1. /// Solutie - Moca Andrei - 100p
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. vector<int> v, st, d;
  5. vector<vector<int>> vd;
  6. int n, res(1e9), curr;
  7. inline void Back(int k)
  8. {
  9. if (k == 0 && res > curr)
  10. res = curr;
  11. if (curr >= res)
  12. return;
  13. for (const int& x : vd[st[k+1]])
  14. {
  15. st[k] = x;
  16. curr += abs(st[k] - v[k]);
  17. if (curr < res)
  18. Back(k - 1);
  19. curr -= abs(st[k] - v[k]);
  20. }
  21. }
  22. int main()
  23. {
  24. cin >> n;
  25. v = st = vector<int>(n + 1);
  26. for (int i = 1; i <= n; ++i)
  27. cin >> v[i];
  28. for (int i = v[n]; i; --i)
  29. if (v[n] % i == 0)
  30. d.emplace_back(i);
  31. vd = vector<vector<int>>(v[n] + 1);
  32. for (size_t i = 0; i < d.size(); ++i)
  33. for (size_t j = i; j < d.size(); ++j)
  34. if (d[i] % d[j] == 0)
  35. vd[d[i]].emplace_back(d[j]);
  36. st[n] = v[n];
  37. Back(n - 1);
  38. cout << res;
  39. return 0;
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement