ได้รับ n ต้องการนับจำนวน BST ที่แตกต่างกันที่สร้างจากค่า 1 ถึง n หากคำตอบใหญ่ให้โมดุลอ 10^9+7
ตัวอย่าง: n=3 ผลลัพธ์คือ 14 (แคตาลันนัมเบอร์ C_4 = 14)
ขั้นตอนการแก้ปัญหา
ใช้ความสัมพันธ์เวียนเกิดของ Catalan numbers: C_{n+1} = 1 + Σ_{i=1}^{n} C_i * C_{n+1-i}
- สร้างอาร์เรย์
aเริ่มต้น [0, 1] - คำนวณ Catalan numbers จนถึง max_n (1000) แล้วเก็บไว้
- คืนค่า
(a[n+1] - 1) % MOD
ตัวอย่างโค้ด Python
def solve(n):
MOD = 10**9 + 7
max_n = 1000
a = [0, 1]
for k in range(2, max_n + 2):
a.append((1 + sum(a[i] * a[k - i] for i in range(1, k))) % MOD)
return (a[n + 1] - 1) % MOD
# ทดสอบ
n = 3
print(solve(n)) # ผลลัพธ์: 14
อินพุตตัวอย่าง
3
เอาต์พุตตัวอย่าง
14