Đầu tiên, một vài định nghĩa:
- Đưa ra
n
vàk
, xem xét danh sách các multiset được sắp xếp , trong đó với mỗi multiset, chúng tôi chọn cáck
số từ{0, 1, ..., n-1}
lặp lại.
Ví dụ: cho n=5
và k=3
, chúng tôi có:
[(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)]
- Một phần là một danh sách các multisets với thuộc tính rằng kích thước của giao điểm của tất cả các multiset trong phần đó là ít nhất
k-1
. Đó là chúng ta lấy tất cả các multiset và cắt chúng (sử dụng giao điểm multiset) cùng một lúc. Ví dụ,[(1, 2, 2), (1, 2, 3), (1, 2, 4)]
là một phần vì giao điểm của nó có kích thước 2, nhưng[(1, 1, 3),(1, 2, 3),(1, 2, 4)]
không phải, bởi vì giao điểm của nó có kích thước 1.
Bài tập
Mã của bạn nên có hai đối số n
và k
. Sau đó, nó nên tham lam đi qua các multisets theo thứ tự được sắp xếp và xuất ra các phần của danh sách. Đối với trường hợp n=5, k=3
, phân vùng chính xác là:
(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)
Đây là một ví dụ khác cho 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)
Làm rõ ý nghĩa của sự tham lam: Đối với mỗi multiset, chúng ta sẽ xem liệu nó có thể được thêm vào phần hiện có hay không. Nếu nó có thể chúng ta thêm nó. Nếu nó không thể chúng ta bắt đầu một phần mới. Chúng tôi xem xét các multisets theo thứ tự được sắp xếp như trong ví dụ được đưa ra ở trên.
Đầu ra
Bạn có thể xuất phân vùng theo bất kỳ định dạng hợp lý nào bạn muốn. Tuy nhiên, nhiều trang nên được viết theo chiều ngang trên một dòng. Đó là một multiset cá nhân không nên được viết theo chiều dọc hoặc trải rộng trên một số dòng. Bạn có thể chọn cách bạn phân tách đại diện của các bộ phận trong đầu ra.
Giả định
Chúng ta có thể giả định rằng n >= k > 0
.
(0, 4, 4)
chính nó? Đưa ra mô tả của bạn, tôi sẽ nghĩ rằng "phần" của nó sẽ là (0, 4, 4), (1, 4, 4), (2, 4, 4), (3, 4, 4), (4, 4, 4)
. Tương tự như vậy (0, 0, 3, 3)
trong trường hợp thử nghiệm thứ hai.