Pada garis bilangan panjang M
, di mana 0 < M <= 1,000,000,000
, Anda memberikan N
( 1 < N <= 100,000
) pasangan bilangan bulat poin. Dalam setiap pasangan, titik pertama mewakili di mana objek saat ini berada, dan titik kedua mewakili di mana objek harus dipindahkan. (Perlu diingat second
poinnya mungkin lebih kecil dari first
).
Sekarang, anggap Anda mulai dari titik 0
dan memiliki gerobak yang dapat menampung 1
objek. Anda ingin memindahkan semua objek dari posisi awal mereka ke posisi akhir masing-masing saat menempuh jarak paling sedikit di sepanjang garis angka ( bukan perpindahan). Anda harus tepat sasaran M
.
Sekarang, saya sudah mencoba untuk mengurangi masalah ini menjadi masalah yang lebih sederhana. Sejujurnya aku bahkan tidak bisa memikirkan solusi brute force ( mungkin serakah). Namun, pemikiran pertama saya adalah untuk merosotkan gerakan mundur ke dua gerakan maju, tetapi itu tampaknya tidak berhasil dalam semua kasus.
Saya membuat 3
contoh kasus uji ini di sini:
Jawaban untuk testcase pertama adalah 12
. Pertama, Anda mengambil red
item di titik 0
. Kemudian Anda pindah ke titik 6
(jarak = 6
), jatuhkan red
item sementara, lalu ambil green
item. Kemudian Anda pindah ke titik 5
(jarak = 1
) dan menjatuhkan green
item. Kemudian Anda kembali ke titik 6
(jarak = 1
) dan mengambil red
item yang Anda jatuhkan, pindah ke titik 9 (jarak = 3
), lalu pindah ke titik 10
(jarak = 1
) untuk menyelesaikan urutan.
Total jarak yang ditempuh adalah 6 + 1 + 1 + 3 + 1 = 12
, yang merupakan jarak minimum yang memungkinkan.
Dua kasus lain punya jawaban 12
, saya yakin. Namun, saya tidak dapat menemukan aturan umum untuk menyelesaikannya.
Ada yang punya ide?