Hướng dẫn cho Đếm hoán vị


Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.

Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.

Authors: cuom1999

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\)\(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\)\(3\), với tương ứng \(dp[2]\)\(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.



Bình luận

Không có bình luận nào.