İlk olarak, birkaç tanım:
- Verilen
n
vek
bir sıralı liste, düşünün MULTISETS her multiset için seçtiğimiz,k
numaraları{0, 1, ..., n-1}
tekrarlar ile.
Örneğin, n=5
ve k=3
için:
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4), (0, 1, 1), ( 0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 2, 2), (0, 2, 3), (0, 2, 4), (0, 3, 3), (0, 3, 4), (0, 4, 4), (1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4), (1, 2, 2), (1, 2, 3), (1, 2, 4), (1, 3, 3), (1, 3, 4), (1, 4, 4) , (2, 2, 2), (2, 2, 3), (2, 2, 4), (2, 3, 3), (2, 3, 4), (2, 4, 4), ( 3, 3, 3), (3, 3, 4), (3, 4, 4), (4, 4, 4)]
- Bir parça , parçadaki tüm çoklu setlerin kesişme boyutunun en azından bir özelliğe sahip bir çoklu ağlar listesidir
k-1
. Bu, tüm çoklu kümeleri alır ve aynı anda (çoklu küme kesişimini kullanarak) kesişiriz. Örnek[(1, 2, 2), (1, 2, 3), (1, 2, 4)]
olarak, kesişimi 2 büyüklüğünde olduğu için bir parçasıdır, ancak[(1, 1, 3),(1, 2, 3),(1, 2, 4)]
değildir, çünkü kesişimi 1 büyüklüğündedir.
Görev
Kodunuz iki argüman almalı n
ve k
. Daha sonra açgözlülükle bu multisets sıralı sırayla gitmek ve listenin bölümlerini çıktı gerekir. Durum n=5, k=3
için doğru bölümleme:
(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4)
(0, 1, 1), (0, 1, 2), (0, 1, 3), (0, 1, 4)
(0, 2, 2), (0, 2, 3), (0, 2, 4)
(0, 3, 3), (0, 3, 4)
(0, 4, 4)
(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4)
(1, 2, 2), (1, 2, 3), (1, 2, 4)
(1, 3, 3), (1, 3, 4)
(1, 4, 4)
(2, 2, 2), (2, 2, 3), (2, 2, 4)
(2, 3, 3), (2, 3, 4)
(2, 4, 4)
(3, 3, 3), (3, 3, 4)
(3, 4, 4), (4, 4, 4)
İşte için başka bir örnek n = 4, k = 4
.
(0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 0, 2), (0, 0, 0, 3)
(0, 0, 1, 1), (0, 0, 1, 2), (0, 0, 1, 3)
(0, 0, 2, 2), (0, 0, 2, 3)
(0, 0, 3, 3)
(0, 1, 1, 1), (0, 1, 1, 2), (0, 1, 1, 3)
(0, 1, 2, 2), (0, 1, 2, 3)
(0, 1, 3, 3)
(0, 2, 2, 2), (0, 2, 2, 3)
(0, 2, 3, 3), (0, 3, 3, 3)
(1, 1, 1, 1), (1, 1, 1, 2), (1, 1, 1, 3)
(1, 1, 2, 2), (1, 1, 2, 3)
(1, 1, 3, 3)
(1, 2, 2, 2), (1, 2, 2, 3)
(1, 2, 3, 3), (1, 3, 3, 3)
(2, 2, 2, 2), (2, 2, 2, 3)
(2, 2, 3, 3), (2, 3, 3, 3)
(3, 3, 3, 3)
Açgözlülüğün ne anlama geldiğinin açıklığa kavuşturulması : Her bir çoklu set için, bunun mevcut parçaya eklenip eklenemeyeceğini görüyoruz. Olabilirse ekleyebiliriz. Eğer yapamazsa yeni bir parçaya başlarız. Çoklu setlere yukarıda verilen örnekte olduğu gibi sıralı bir şekilde bakarız.
Çıktı
Bölümlemeyi istediğiniz herhangi bir biçimde biçimlendirebilirsiniz. Ancak, çoklu setler tek bir satıra yatay olarak yazılmalıdır. Bireysel bir çoklu set dikey olarak yazılmamalı veya birkaç satıra yayılmamalıdır. Çıktıdaki parçaların sunumunu nasıl ayıracağınızı seçebilirsiniz.
Varsayımlar
Bunu varsayabiliriz n >= k > 0
.
(0, 4, 4)
başına? Açıklamanız göz önüne alındığında, onun "parçası" olacağını düşünürdüm (0, 4, 4), (1, 4, 4), (2, 4, 4), (3, 4, 4), (4, 4, 4)
. Benzer şekilde (0, 0, 3, 3)
ikinci test durumunda.