สมมติว่าเรามีตัวเลข n ถ้าเรามีตัวเลขเช่น [1,2,...,n] เราต้องนับจำนวน BST ที่เป็นไปได้ที่สามารถสร้างได้โดยใช้ค่า n เหล่านี้ หากคำตอบมีขนาดใหญ่เกินไป ให้แก้ไขผลลัพธ์ด้วย 10^9+7
ดังนั้น หากอินพุตเท่ากับ n =3 เอาต์พุตจะเป็น 14

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้
- a :=รายการที่มีค่า [0, 1]
- ม :=10^9+7
- max_n :=1,000
- สำหรับ k ในช่วง 2 ถึง max_n + 1 ทำ
- แทรก (1 + ผลรวมขององค์ประกอบทั้งหมดของรายการ (a[i] * a[k - i] สำหรับ i ทั้งหมดในช่วง (1, k))) mod m ที่ส่วนท้ายของ a
- ผลตอบแทน (a[n + 1] - 1) mod m
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(n):
a = [0, 1]
m = 10**9+7
max_n = 1000
for k in range(2, max_n + 2):
a.append((1 + sum(a[i] * a[k - i] for i in range(1, k))) % m)
return ((a[n + 1] - 1) % m)
n = 3
print(solve(n)) อินพุต
3
ผลลัพธ์
14