Arka fon
Bir an için akıl almaz derecede sıkıcı bir işin olduğunu hayal et. Her sabah, o gün çalışmanız gereken bir dizi görev verilir. Her görevin belirli bir süresi vardır ve başlatıldıktan sonra, bir seferde tamamlanmalıdır. Patronunuz rölantide tolere etmeyecektir, bu yüzden eve gitmeden önce hala tamamlayabileceğiniz görevler varsa, bunlardan biri üzerinde çalışmalısınız (hangisini seçeceğinizi seçebilirsiniz). Tersine, kalan tüm görevler fazla mesai yapmanızı gerektiriyorsa, eve erken dönebilirsiniz! Böylece amacınız akıllı zamanlama ile iş gününüzün uzunluğunu en aza indirmek.
Eğlenceli gerçek: Bu tembel bürokrat çizelgeleme probleminin bir varyantı ve NP zor ( kaynak ).
Giriş
İki girişiniz vardır: iş gününüzdeki "zaman birimleri" sayısı (pozitif bir tam sayı L
) ve görevlerin toplanması ( T
görev sürelerini temsil eden boş olmayan pozitif tamsayılar dizisi ). Herhangi bir sırada ve makul bir formatta alınabilirler. Dizi T
, süresi daha uzun olan görevler içerebilir L
, ancak en fazla süresi olan en az bir görev içermesi garanti edilir L
.
Çıktı
Bir geçerli zamanlama görevleri bir alt kümesidir S ⊆ T
öyle ki sum(S) ≤ L
, değil her görev S
(sayım çokluklar) kesinlikle daha fazla süreye sahip L - sum(S)
. Çıktınız geçerli bir programın mümkün olan en küçük toplamı olacaktır. Başka bir deyişle, bugün çalışmanız gereken minimum zaman birimi sayısını çıkarmalısınız.
Misal
Girdileri düşünün
L = 9
T = [3,4,4,4,2,5]
Gününüzü planlamanın bir yolu şudur [4,4]
: 8 zaman biriminde iki görevi bitirirsiniz ve 1 birim kalır. 1 birim görev olmadığından eve gidebilirsiniz. Ancak, zamanlama [2,5]
daha da iyidir: 7 zaman birimi için çalışırsınız ve kalan tüm görevler 3 veya daha fazla zaman birimi alır. Zamanlama [2,4]
geçerli değildir, çünkü 6 zaman birimi için çalıştıktan sonra, 3 birim görevini bitirmek için yeterli zamanınız olacaktır. 7 birim en uygun olduğu ortaya çıktı, bu yüzden doğru çıktı 7
.
Kurallar ve puanlama
Tam bir program veya bir işlev yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklara izin verilmez. Zaman bağlı değildir, bu nedenle kaba zorlama mükemmel kabul edilebilir.
Test senaryoları
Bunlar formatta verilmiştir L T -> output
.
1 [1,2] -> 1
6 [4,1] -> 5
7 [7,7,9] -> 7
9 [3,4,4,4,2,5] -> 7
20 [6,2,3,12,7,31] -> 17
42 [7,7,7,7,8,8,8] -> 36
42 [7,7,7,7,7,8,8,8] -> 35
42 [7,7,7,7,7,7,8,8,8] -> 36
16 [1,2,3,4,5,6,7,8,9,10] -> 13
37 [15,27,4,1,19,16,20,26,29,18] -> 23
22 [24,20,8,8,29,16,5,5,16,18,4,9] -> 18
80 [10,22,11,2,28,20,27,6,24,9,10,6,27,2,15,29,27] -> 71
59 [26,28,5,4,7,23,5,1,9,3,7,15,4,23,7,19,16,25,26] -> 52