Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <utility>
- using std::vector;
- using std::cin;
- using std::cout;
- using std::pair;
- int dp[1111][1111][2] = {};
- int main() {
- int num;
- cin >> num;
- int inf = 111111111;
- vector<pair<int, int> > values;
- for (int i = 0; i < num; ++i) {
- int pos, time;
- cin >> pos >> time;
- values.push_back({ pos, time });
- }
- std::sort(values.begin(), values.end());
- for (int i = 0; i < num; ++i) {
- for (int j = 0; j < num; ++j) {
- dp[i][j][0] = inf;
- dp[i][j][1] = inf;
- if (i == j) {
- dp[i][j][0] = dp[i][j][1] = 0;
- }
- }
- }
- for (int i = 0; i < num; ++i) {
- for (int j = i + 1; j < num; ++j) {
- if (j > 0 && values[j].second >= dp[i][j - 1][1] + abs(values[j].first - values[j - 1].first)) {
- dp[i][j][1] = std::min(dp[i][j][1], dp[i][j - 1][1] + abs(values[j].first - values[j - 1].first));
- }
- }
- }
- for (int i = num - 2; i >= 0; --i) {
- for (int j = i + 1; j < num; ++j) {
- if (i + 1 < num && values[i].second >= dp[i + 1][j][0] + abs(values[i].first - values[i + 1].first)) {
- dp[i][j][0] = std::min(dp[i][j][0], dp[i + 1][j][0] + abs(values[i].first - values[i + 1].first));
- }
- }
- }
- cout << std::min(dp[0][num - 1][0], dp[0][num - 1][1]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement