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 secondpoinnya mungkin lebih kecil dari first).
Sekarang, anggap Anda mulai dari titik 0dan memiliki gerobak yang dapat menampung 1objek. 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 3contoh kasus uji ini di sini:
Jawaban untuk testcase pertama adalah 12. Pertama, Anda mengambil reditem di titik 0. Kemudian Anda pindah ke titik 6(jarak = 6), jatuhkan reditem sementara, lalu ambil greenitem. Kemudian Anda pindah ke titik 5(jarak = 1) dan menjatuhkan greenitem. Kemudian Anda kembali ke titik 6(jarak = 1) dan mengambil reditem 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?