Editorial for Đếm hoán vị
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
Trường hợp \(k = 2\), bài toán sẽ quy về đếm có bao nhiêu cây là heap. Thuật toán để giải bài này là quy hoạch động trên cây.
Giả sử đỉnh \(1\) có các đỉnh con là \(2\) và \(3\). Gọi \(dp[x]\) là số heap có thể tạo thành từ subtree tại \(x\), và \(sub[x]\) là size của subtree tại \(x\). Khi đó, \(dp[1] = dp[2] \times dp[3] \times C^{sub[2]}_{sub[2] + sub[3]}\). Công thức trên được suy ra bằng cách sau:
- Đầu tiên đỉnh \(1\) phải chứa số nhỏ nhất
- Chọn \(sub[2]\) số cho subtree tại \(2\), số cách sẽ là \(C^{sub[2]}_{sub[1] - 1} = C^{sub[2]}_{sub[2] + sub[3]}\)
- Quy về hai bài toán con tại subtree \(2\) và \(3\), với tương ứng \(dp[2]\) và \(dp[3]\) cách.
- Áp dụng quy tắc nhân, chúng ta có công thức trên
Trường hợp \(k\) bất kỳ, chúng ta làm hoàn toàn tương tự. Điểm khác duy nhất là một đỉnh có thể có nhiều hơn \(2\) đỉnh con.
Comments