Advertisement
Guest User

Untitled

a guest
Nov 16th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <utility>
  6.  
  7. int main() {
  8.     const int BIG_CONST = 2000000000;
  9.     size_t count_coins;
  10.     std::cin >> count_coins;
  11.     std::vector<int> coins(count_coins);
  12.     std::vector<int> lifetime(count_coins);
  13.     for (size_t i = 0; i < count_coins; ++i) {
  14.             std::cin >> coins[i];
  15.             std::cin >> lifetime[i];
  16.     }
  17.     std::vector<std::vector<std::pair<int, int>>> ans(count_coins,
  18.             std::vector<std::pair<int, int>> (count_coins));
  19.     size_t count = 0;
  20.     while (count < count_coins) {
  21.         for (size_t ii = 0; ii < count_coins; ++ii) {
  22.             size_t jj = ii + count;
  23.             if (jj < count_coins) {
  24.                 if (ii == jj) {
  25.                     ans[ii][jj].first = 0;
  26.                     ans[ii][jj].second = 0;
  27.                 } else {
  28.                     ans[ii][jj].first = std::min(ans[ii + 1][jj].first +
  29.                             abs(coins[ii] - coins[ii + 1]),
  30.                             ans[ii + 1][jj].second + abs(coins[ii] - coins[jj]));
  31.                     ans[ii][jj].second = std::min(ans[ii][jj - 1].first +
  32.                             abs(coins[ii] - coins[jj]),
  33.                             ans[ii][jj - 1].second + abs(coins[jj - 1] - coins[jj]));
  34.                     if (ans[ii][jj].first > lifetime[ii]) {
  35.                         ans[ii][jj].first = BIG_CONST;
  36.                     }
  37.                     if (ans[ii][jj].second > lifetime[jj]) {
  38.                         ans[ii][jj].second = BIG_CONST;
  39.                     }
  40.                 }
  41.             }
  42.         }
  43.         ++count;
  44.     }
  45.  
  46.     int result;
  47.     result = std::min(ans[0][count_coins-1].first, ans[0][count_coins-1].second);
  48.     if (result < BIG_CONST) {
  49.         std::cout << result;
  50.     } else {
  51.         std::cout << "No solution";
  52.     }
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement