Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <cmath>
- #include <utility>
- int main() {
- const int BIG_CONST = 2000000000;
- size_t count_coins;
- std::cin >> count_coins;
- std::vector<int> coins(count_coins);
- std::vector<int> lifetime(count_coins);
- for (size_t i = 0; i < count_coins; ++i) {
- std::cin >> coins[i];
- std::cin >> lifetime[i];
- }
- std::vector<std::vector<std::pair<int, int>>> ans(count_coins,
- std::vector<std::pair<int, int>> (count_coins));
- size_t count = 0;
- while (count < count_coins) {
- for (size_t ii = 0; ii < count_coins; ++ii) {
- size_t jj = ii + count;
- if (jj < count_coins) {
- if (ii == jj) {
- ans[ii][jj].first = 0;
- ans[ii][jj].second = 0;
- } else {
- ans[ii][jj].first = std::min(ans[ii + 1][jj].first +
- abs(coins[ii] - coins[ii + 1]),
- ans[ii + 1][jj].second + abs(coins[ii] - coins[jj]));
- ans[ii][jj].second = std::min(ans[ii][jj - 1].first +
- abs(coins[ii] - coins[jj]),
- ans[ii][jj - 1].second + abs(coins[jj - 1] - coins[jj]));
- if (ans[ii][jj].first > lifetime[ii]) {
- ans[ii][jj].first = BIG_CONST;
- }
- if (ans[ii][jj].second > lifetime[jj]) {
- ans[ii][jj].second = BIG_CONST;
- }
- }
- }
- }
- ++count;
- }
- int result;
- result = std::min(ans[0][count_coins-1].first, ans[0][count_coins-1].second);
- if (result < BIG_CONST) {
- std::cout << result;
- } else {
- std::cout << "No solution";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement