kdzhr

Клумбы

May 4th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. // RE&TL http://contest.uni-smr.ac.ru/ru/problemset/6131/
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. void search(size_t cur_i, uint32_t cur_max, std::vector<size_t> &cur_map,
  6.         size_t &n, std::vector<uint32_t> &f, std::vector<size_t> &res, uint32_t &min) {
  7.     if (cur_i == n) {
  8.         if (cur_max < min) {
  9.             min = cur_max;
  10.             res = cur_map;
  11.         }
  12.     } else {
  13.         if (cur_i < n - 1) {
  14.             cur_map.push_back(2);
  15.             cur_map.push_back(2);
  16.             search(cur_i + 2, std::max(cur_max, 2 * (((f[cur_i] + 1) / 2) + (f[cur_i + 1] + 1) / 2)),
  17.                     cur_map, n, f, res, min);
  18.             cur_map.pop_back();
  19.             cur_map.pop_back();
  20.         }
  21.         cur_map.push_back(1);
  22.         search(cur_i + 1, std::max(cur_max, 2 * f[cur_i]), cur_map, n, f, res, min);
  23.         cur_map.pop_back();
  24.     }
  25. }
  26.  
  27.  
  28.  
  29. int main() {
  30.     size_t n;
  31.     std::cin >> n;
  32.     std::vector<uint32_t> f(n);
  33.     for (size_t i = 0; i < n; i++) {
  34.         std::cin >> f[i];
  35.     }
  36.     uint32_t max = UINT32_MAX;
  37.     std::vector<size_t> res;
  38.     std::vector<size_t> cur_map;
  39.     search(0, 0, cur_map, n, f, res, max);
  40.     std::cout << max << '\n';
  41.     for (auto elem : res) {
  42.         std::cout << elem << ' ';
  43.     }
  44.     return 0;
  45. }
Add Comment
Please, Sign In to add comment