1 Ekim 2014 Çarşamba

Putnik

PUTNIK

Traveling Salesman problemini duymuşsunuzdur. Eğer duymuşsanız o problemin NP-hard olduğunu bilirsiniz çünkü iyi bir çözüm bulmak zordur.Pekala, bu soru ünlü problemin az rastlanan bir versiyonudur! Az rastlanması temel olarak 'çözülebilmesi'nden gelir.

Postacımız N tane şehri her birini tam olarak sadece bir kez dolaşmakla görevlidir.Şehirler 1,2,3...N olarak adlandırılır. Elimizde her şehirden birbirine giden yolların ne kadar sürdüğünü belirten bir tablo vardır. Postacı, mükemmel bir insan olduğundan, elindeki tablodan yola çıkarak öyle bir yol haritası oluşturmak ister ki toplam şehirleri dolaşma süresi minimum olsun.

Fakat herşey bu kadar kolay değildir. Postacının bir takıntısı vardır. O da şudur, her hangi bir K. şehir için kendinden önce gelen K-1 tane şehrin hepsini ya K'ya gitmeden önce dolaşmış, yada aynı şekilde hepsini K'ya gittikten sonra dolaşıcak olmalıdır.Başka bir deyişle, eğer K'dan küçük numaralı bir şehri K'ya gitmeden önce dolaşmışsa, K'ya gitmeden önce 1...K-1 şehirlerinin hepsini dolaşmış olması gerekmektedir.

Bu şartlara uyarak, postacının istediği şehirden başladığı ve istediği şehirde bitirdiği, bütün şehirleri dolaşmış olduğu minimum süreyi bulunuz.

GİRDİ

ilk satırda N (2 ≤ N ≤ 1500)
alt satırda NxN'lik bir tablo, i'inci satırdaki şehir ile j'inci sütundaki şehir arasındaki süreyi gösterir.

ÇIKTI

Tek satırda Minimum süre

ÖRNEKLER
girdi

3

0 5 2

5 0 4

2 4 0

çıktı

7

girdi

4

0 15 7 8

15 0 16 9

7 16 0 12

8 9 12 0

çıktı

31

Birinci girdideki çözümün şehir sıralaması : 2,1,3 veya 3,1,2
İkinci girdideki çözümün şehir sıralaması : 3, 1, 2, 4 veya 4, 2, 1, 3.

ÇÖZÜM
Postacının takıntısını giderecek tüm sıralamalara şu yolla ulaşabiliriz. İlk olarak 1. şehir sıralamaya eklenir sonra 2. şehir sıralamanın sağına veya soluna konulur, bu işlem N. şehire kadar devam eder ve bu yolla elde edilen her sıralama Postacının takıntısına uygundur.Artık soru dinamik programlama ile çözülebilir.Elde ettiğimiz sıralamaları listenin sağındaki ve solundaki şehir ile adlandıracağız.Bu iki şehiri bilmemiz demek bir sonraki eklenecek şehri bilmemiz demektir.Neden ? Çünkü o sıralamaya en son eklediğimiz şehir o sıranın ya solunda ya da sağında bulunmak zorundadır.Böylece ekliyceğimiz şehirin numarası onun bir fazlası olacaktır.Bu noktada ekleyeceğimiz şehir için sağa veya sola ekleme olmak üzere iki ihtimal vardır,Önceki bulduğumuz dinamik değerler ile, sağına veya soluna koyduğumuzda oluşucak minimum süreleri yeni dinamik değerler olarak bulabiliriz.Böyle ilerleyerek bütün şehirleri dolaştığımız en kısa süreyi dinamik dizi üzerinden buluruz.
O(N 2 ).

Soru: http://www.hsin.hr/coci/contest2_tasks.pdf
Girdi-Cikti: http://www.hsin.hr/coci/contest2_testdata.zip
İngilizce Çözüm: http://www.hsin.hr/coci/contest2_solutions.zip



Hiç yorum yok:

Yorum Gönder