Advertisement
Guest User

Untitled

a guest
Nov 11th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. #include <utility>
  5.  
  6. using std::vector;
  7. using std::cin;
  8. using std::cout;
  9. using std::pair;
  10.  
  11. int dp[1111][1111][2] = {};
  12.  
  13. int main() {
  14. int num;
  15. cin >> num;
  16. int inf = 111111111;
  17. vector<pair<int, int> > values;
  18. for (int i = 0; i < num; ++i) {
  19. int pos, time;
  20. cin >> pos >> time;
  21. values.push_back({ pos, time });
  22. }
  23. std::sort(values.begin(), values.end());
  24. for (int i = 0; i < num; ++i) {
  25. for (int j = 0; j < num; ++j) {
  26. dp[i][j][0] = inf;
  27. dp[i][j][1] = inf;
  28. if (i == j) {
  29. dp[i][j][0] = dp[i][j][1] = 0;
  30. }
  31. }
  32. }
  33.  
  34. for (int i = 0; i < num; ++i) {
  35. for (int j = i + 1; j < num; ++j) {
  36. if (j > 0 && values[j].second >= dp[i][j - 1][1] + abs(values[j].first - values[j - 1].first)) {
  37. dp[i][j][1] = std::min(dp[i][j][1], dp[i][j - 1][1] + abs(values[j].first - values[j - 1].first));
  38. }
  39. }
  40. }
  41.  
  42. for (int i = num - 2; i >= 0; --i) {
  43. for (int j = i + 1; j < num; ++j) {
  44. if (i + 1 < num && values[i].second >= dp[i + 1][j][0] + abs(values[i].first - values[i + 1].first)) {
  45. dp[i][j][0] = std::min(dp[i][j][0], dp[i + 1][j][0] + abs(values[i].first - values[i + 1].first));
  46. }
  47. }
  48. }
  49. cout << std::min(dp[0][num - 1][0], dp[0][num - 1][1]);
  50. return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement