Trên một dòng số có độ dài M
, trong đó 0 < M <= 1,000,000,000
, bạn đã cho N
( 1 < N <= 100,000
) các cặp số nguyên. Trong mỗi cặp, điểm đầu tiên biểu thị vị trí của một đối tượng và điểm thứ hai biểu thị nơi một đối tượng sẽ được di chuyển. (Hãy nhớ rằng second
điểm có thể nhỏ hơn first
).
Bây giờ, giả sử bạn bắt đầu tại điểm 0
và có một giỏ hàng có thể chứa 1
đối tượng. Bạn muốn di chuyển tất cả các đối tượng từ vị trí ban đầu của chúng đến vị trí cuối cùng tương ứng của chúng trong khi di chuyển khoảng cách ít nhất dọc theo dòng số ( không phải dịch chuyển). Bạn phải kết thúc tại điểm M
.
Bây giờ, tôi đã cố gắng giảm vấn đề này thành một vấn đề đơn giản hơn. Thành thật mà nói tôi thậm chí không thể nghĩ ra một giải pháp vũ phu ( có thể là tham lam). Tuy nhiên, suy nghĩ đầu tiên của tôi là làm thoái hóa một chuyển động lùi về hai chuyển động về phía trước, nhưng dường như điều đó không hiệu quả trong mọi trường hợp.
Tôi đã rút ra các 3
trường hợp thử nghiệm mẫu ở đây:
Câu trả lời cho testcase đầu tiên là 12
. Đầu tiên, bạn chọn red
mục tại điểm 0
. Sau đó, bạn di chuyển đến điểm 6
(khoảng cách = 6
), red
tạm thời thả vật phẩm, sau đó nhặt green
vật phẩm lên. Sau đó, bạn di chuyển đến điểm 5
(khoảng cách = 1
) và thả green
vật phẩm. Sau đó, bạn di chuyển trở lại điểm 6
(khoảng cách = 1
) và nhặt red
vật phẩm bạn đánh rơi, di chuyển đến điểm 9 (khoảng cách = 3
), sau đó di chuyển đến điểm 10
(khoảng cách = 1
) để kết thúc chuỗi.
Tổng quãng đường đã đi là 6 + 1 + 1 + 3 + 1 = 12
khoảng cách tối thiểu có thể.
Hai trường hợp khác có câu trả lời 12
, tôi tin. Tuy nhiên, tôi không thể tìm thấy một quy tắc chung để giải quyết nó.
Bất cứ ai có ý tưởng?