Module: Dinamik Programlamada Kalıplar


Problem

5 /7


Restoran

Theory Click to read/hide

Sorumluluk Reddi: Aşağıda açıklanan yöntem evrensel değildir ancak genellikle bir sorunu çözebilir veya doğru çözüme ulaşmanıza yardımcı olabilir.

Bazı eksenlerde (genellikle zaman ekseni veya bazı dizilerin indeksleri) bir dizi boşluk varsa ve seçilen boşlukların kesişmemesi için bunlardan bazılarını en uygun şekilde seçmeniz gerekiyorsa, o zaman dinamik programlama kullanmayı denemelisiniz. .

Yaklaşık çözüm şeması:

Başlangıçta, mevcut boşlukları sağ kenarlığa göre sıralarız. Şu dinamikleri başlatalım: dp[i] - ilk i aralığının cevabı. 
Şu şekilde yeniden hesaplayacağız: önce bu aralığın kullanılmayacak durumunu ele alalım, sonra sadece dp[i] = dp[i-1]. Bunun i büyüdükçe dp[i] değerlerinin düşmemesini sağladığına dikkat edin. Ve bu mantıklı, çünkü. yeni bir boşluk ekleyerek küresel yanıtı kötüleştiremeyiz: ya yeni boşluğu görmezden geliriz ya da onu kullanarak daha karlı bir değişken oluştururuz. Şimdi, i'inci boşluğu kullanmak istiyorsak, sağ kenarları mevcut aralığın sol sınırından daha az olan boşlukları kullanabiliriz, çünkü bir dizi örtüşmeyen boşluk seçmemiz gerekir. Bunu yapmak için başlangıçta boşlukları sağ kenarlığa göre sıraladık, böylece şimdi gerekli konumu verimli bir şekilde bulabiliriz. Bu, mümkünse analitik olarak yapılabilir, ancak genel durumda, sağ sınırı geçerli olanın sol sınırından daha az olan ve aynı zamanda mümkün olan maksimum sınır olan bir binsearch ile bir boşluk bulmak mümkündür. bir. Açgözlü nedenlerle sağ sınırı maksimize etmek istiyoruz, çünkü büyüdükçe, cevap sadece artabilir. Buna göre gerekli p konumunu buluyoruz ve dp[i]'den dp[p]'ye ve i'inci aralığı yeniden hesaplıyoruz.

Problem

Restoran bir ziyafet için n sipariş aldı. Her sıra iki değerle karakterize edilir: ziyafetin başlangıç ​​zamanı li ve bitiş zamanı ri (li ≤  r i).

Restoran yönetimi siparişi kabul edebilir veya reddedebilir. Kabul edilebilecek maksimum sipariş sayısı nedir?

Kabul edilen iki emir kesişemez, yani aynı anda kabul edilen iki emre ait bir zaman noktası olmamalıdır. Emirlerden biri diğeriyle aynı anda başlarsa, birlikte kabul edilemezler.

Giriş:
İlk satır bir tamsayı içerir n (1 ≤ n ≤ 200000) — sipariş sayısı. Sonraki n satırın her biri bir tamsayı çifti içerir li, ri (0 ≤ li  &le ; ri ≤ 109).

Çıktı:
Kabul edilebilecek maksimum sipariş sayısını yazdırın.

Örnekler:
 
Giriş Çıktı
2
7 11
4 7
1
5
1 2
23
34
4 5
5 6
3
6
48
15
47
25
1 3
68
2