kdzhr

D. По законам жанра

Mar 18th, 2020
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.76 KB | None | 0 0
  1. // 30 pts http://contest.uni-smr.ac.ru/ru/problemset/6141/
  2.  
  3. # include <iostream>
  4. # include <vector>
  5.  
  6. void search(size_t &n, size_t cur_n, std::vector<std::vector<size_t>> &m, std::vector<size_t> nums, uint64_t &res,
  7.         size_t &count, std::vector<size_t> &res_groups) {
  8.     if (cur_n == n) {
  9.         if (!nums.empty()) {
  10.             bool allowed = true;
  11.             uint64_t sum = m[nums[0]][2];
  12.             for (size_t i = 1; i < nums.size(); i++) {
  13.                 if (m[nums[i - 1]][0] < m[nums[i]][0] && m[nums[i - 1]][0] + m[nums[i - 1]][1] < m[nums[i]][0] + m[nums[i]][1]) {
  14.                     sum += m[nums[i]][2];
  15.                 } else {
  16.                     allowed = false;
  17.                     break;
  18.                 }
  19.             }
  20.             if (allowed) {
  21.                 if (sum > res) {
  22.                     res = sum;
  23.                     count = nums.size();
  24.                     res_groups = nums;
  25.                 }
  26.             }
  27.         }
  28.  
  29.     } else {
  30.         search(n, cur_n + 1, m, nums, res, count, res_groups);
  31.         nums.push_back(cur_n);
  32.         search(n, cur_n + 1, m, nums, res, count, res_groups);
  33.  
  34.     }
  35. }
  36.  
  37.  
  38.  
  39.  
  40. int main() {
  41.     size_t n;
  42.     std::cin >> n;
  43.     std::vector<std::vector<size_t>> m(n);
  44.     for (size_t i = 0; i < n; i++) {
  45.         size_t a, w, c;
  46.         std::cin >> a >> w >> c;
  47.         m[i].resize(3);
  48.         m[i][0] = a;
  49.         m[i][1] = w;
  50.         m[i][2] = c;
  51.     }
  52.     uint64_t res = 0;
  53.     size_t count = 0;
  54.     std::vector<size_t> nums;
  55.     std::vector<size_t> res_groups;
  56.     search(n, 0, m, nums, res, count, res_groups);
  57.     std::cout << res << '\n';
  58.     std::cout << count << '\n';
  59.     for (auto elem : res_groups) {
  60.         std::cout << elem + 1 << ' ';
  61.     }
  62.     return 0;
  63. }
Add Comment
Please, Sign In to add comment