Saya butuh bantuan untuk masalah ICM ACM ini. Ide saya saat ini adalah untuk memodelkan ini sebagai masalah jalur terpendek, yang dijelaskan di bawah pernyataan masalah.
Masalah
Ada N = 1000
kontainer limbah nuklir yang terletak di sepanjang garis angka 1-D pada posisi yang berbeda dari -500,000 to 500,000
, kecuali x=0
. Seseorang bertugas mengumpulkan semua tempat sampah. Setiap detik bahwa wadah limbah tidak dikumpulkan, ia memancarkan 1 unit radiasi. Orang tersebut mulai x = 0
dan dapat memindahkan 1
unit setiap detik, dan mengumpulkan sampah membutuhkan waktu yang sangat sedikit. Kami ingin menemukan jumlah minimum radiasi yang dilepaskan saat mengumpulkan semua wadah.
Input sampel:
4
Wadah terletak di [-12, -2, 3, 7]
.
Cara terbaik untuk mengumpulkan wadah-wadah ini adalah [-2, 3, 7, -12]
, untuk emisi minimum 50
unit. Penjelasan: orang tersebut pergi ke -2
dalam 2 detik dan selama waktu itu 2 units
radiasi dipancarkan. Dia kemudian pergi ke 3
(jarak:) 5
sehingga barel telah merilis 2 + 5 = 7
unit radiasi. Dia membutuhkan 4
lebih banyak detik untuk sampai ke x = 7
tempat laras itu dipancarkan 2 + 5 + 4 = 11
. Dia membutuhkan beberapa 19
detik untuk sampai ke x = -12
tempat laras itu dipancarkan 2 + 5 + 4 + 19 = 30
. 2 + 7 + 11 + 30 = 50
, yang jawabannya.
Catatan
Ada O(N!)
solusi yang jelas . Namun, saya telah menjelajahi metode serakah seperti pindah ke yang terdekat, atau pindah ke cluster terdekat tetapi itu tidak berhasil.
Saya sudah memikirkan masalah ini cukup lama, dan telah memodelkannya sebagai masalah pencarian grafik:
- Kami menyisipkan
0
sebagai posisi dasar (Ini akan menjadi keadaan awal) - Kemudian, kami menyortir posisi dari paling tidak ke yang terbesar.
- Kami kemudian melakukan BFS / PFS, di mana
state
terdiri dari- Dua bilangan bulat
l
danr
yang mewakili rentang berdekatan dalam susunan posisi yang diurutkan yang telah kami kunjungi - Integer
loc
yang memberi tahu kita apakah kita berada di titik akhir kiri atau kanan rentang - Integer
time
yang memberi tahu kita waktu yang telah berlalu - 'Biaya' integer yang memberi tahu kami total biaya sejauh ini (berdasarkan node yang kami kunjungi)
- Dua bilangan bulat
- Dari masing-masing negara kita dapat pindah ke [l - 1, r] dan [l, r + 1], menyesuaikan 3 bilangan bulat lainnya sesuai
- Keadaan akhir adalah [0, N], memeriksa kedua posisi akhir.
Namun, tampaknya itu [L, R, loc]
tidak secara unik mendefinisikan keadaan, dan kita harus menyimpan L, R, loc, and time
, sambil meminimalkan cost
masing-masing. Ini mengarah ke algoritma eksponensial, yang masih terlalu lambat untuk kebaikan apa pun.
Adakah yang bisa membantu saya memperluas ide saya atau mendorong saya ke arah yang benar?
Sunting: Mungkin ini dapat dimodelkan sebagai masalah optimisasi pemrograman dinamis? Berpikir tentang itu, ia memiliki masalah yang sama dengan solusi pencarian grafik - hanya karena saat cost
ini rendah tidak berarti itu adalah jawaban yang optimal untuk sub masalah, karena time
juga sangat mempengaruhi jawaban.
Serakah tidak berfungsi: Saya memiliki algoritme seleksi rakus yang memperkirakan biaya pindah ke tempat tertentu (misalnya jika kita bergerak ke kanan, kita menggandakan jarak ke barel kiri dan semacamnya).
Bisakah Anda melakukan pencarian Prioritas-pertama, dengan heuristik? Heuristik dapat menggabungkan biaya perjalanan saat ini dengan jumlah waktu yang telah berlalu.