Bu ACM ICPC sorununda yardıma ihtiyacım var. Şu anki fikrim, bunu sorun ifadesi altında açıklanan en kısa yol problemi olarak modellemek.
Sorun
Var N = 1000
bir 1-D numarası hattı boyunca yer alan nükleer atık kaplar farklı pozisyonlarında -500,000 to 500,000
hariç x=0
. Bir kişi tüm çöp kutularını toplamakla görevlendirilir. Atık kabının toplanmadığı her saniye 1 birim radyasyon yayar. Kişi başlar x = 0
ve 1
birimi her saniye hareket ettirebilir ve atıkların toplanması ihmal edilebilir bir zaman alır. Tüm kapları toplarken açığa çıkan minimum radyasyon miktarını bulmak istiyoruz.
Örnek Giriş:
4
Kapsayıcılar [-12, -2, 3, 7]
.
Bu kapları toplamak için en iyi emir [-2, 3, 7, -12]
, en az 50
birim yaymaktır . Açıklama: Kişi -2
2 saniye içinde gider ve bu süre zarfında 2 units
radyasyon yayılır. Daha sonra 3
(mesafe :) 'a gider, 5
böylece namlu 2 + 5 = 7
radyasyon birimleri yayınlar. O namlunun birimler yaydığı yere 4
ulaşmak için daha fazla zaman alıyor . O namlunun birimler yaydığı yere ulaşmak için saniyeler alır . , cevap budur.x = 7
2 + 5 + 4 = 11
19
x = -12
2 + 5 + 4 + 19 = 30
2 + 7 + 11 + 30 = 50
notlar
Açık bir O(N!)
çözüm var. Ancak, en yakın olana geçmek veya en yakın kümeye gitmek gibi açgözlü yöntemleri araştırdım ama bunlar işe yaramadı.
Bu problemi bir süredir düşündüm ve bir grafik arama problemi olarak modelledim:
- Bu insert
0
bir temel pozisyonda olarak (bu ilk durum olacaktır) - Sonra pozisyonları en azdan en büyüğe doğru sıralarız.
- Sonra bir BFS / PFS, do
state
oluşur- İki tamsayı
l
ver
sıralanmış konum dizisinde daha önce ziyaret ettiğimiz bitişik bir aralığı temsil ediyor loc
Aralığın sol veya sağ uç noktasında olup olmadığımızı bize bildiren bir tam sayıtime
Geçen süreyi gösteren bir tam sayı- Bize şu ana kadar toplam maliyeti bildiren bir tam sayı 'maliyeti' (ziyaret ettiğimiz düğümlere dayanarak)
- İki tamsayı
- Her durumdan, diğer 3 tamsayıyı buna göre ayarlayarak [l - 1, r] ve [l, r + 1] 'e geçebiliriz
- Son durum [0, N] olup her iki bitiş konumunu da kontrol eder.
Ancak, [L, R, loc]
bir devleti benzersiz bir şekilde tanımlamıyor gibi görünüyor ve bunların her birini L, R, loc, and time
en aza indirirken depolamamız gerekiyor cost
. Bu, herhangi bir mal için hala çok yavaş olan üstel bir algoritmaya yol açar.
Biri fikrimi genişletmeme veya doğru yönde itmeme yardımcı olabilir mi?
Düzenleme: Belki bu dinamik bir programlama optimizasyonu sorunu olarak modellenebilir? Bunu düşünmek, grafik arama çözümü ile aynı sorunlara sahiptir - akımın cost
düşük olması, bu alt problem için en uygun cevap olduğu anlamına gelmez, çünkü time
yanıtı da büyük ölçüde etkiler.
Açgözlü çalışmıyor: Belirli bir yere taşınmanın maliyetini tahmin eden açgözlü bir seçim algoritmam var (örneğin sağa hareket edersek, mesafeleri sol varillere ve ikiye katlıyoruz).
Bir sezgisel tarama ile önce Öncelikli bir arama yapabilir misiniz? Buluşsal yöntem, mevcut seyahatin maliyetini geçen zamanla birleştirebilir.