Một dãy dấu ngoặc hợp lệ là một dãy các ký tự "(" và ")" được định nghĩa như sau:
- Dãy rỗng là một dãy dấu ngoặc hợp lệ độ sâu 0
- Nếu A là dãy dấu ngoặc hợp lệ độ sâu k thì (A) là dãy dấu ngoặc hợp lệ độ sâu k+1
- Nếu A và B là hai dãy dấu ngoặc hợp lệ với độ sâu lần lượt là p và q thì AB là dãy dấu ngoặc hợp lệ độ sâu là max(p,q)
Độ dài của một dãy ngoặc là tổng số ký tự "(" và ")"
Bài toán đặt ra là khi cho biết trước hai số nguyên dương n và k, hãy liệt kê các dãy ngoặc hợp lệ có độ dài n và độ sâu là k
INPUT: file BRACKET.INP
- Dòng đầu tiên viết n là độ dài dãy dấu ngoặc
- Dòng thứ hai viết k là độ sâu dãy dấu ngoặc
OUTPUT: file BRACKET.OUT
Gồm nhiều dòng, mỗi dòng là 1 dãy dấu ngoặc hợp lệ
Ví dụ:
INPUT:
8
3
OUTPUT
((()()))
((())())
((()))()
(()(()))
()((()))
Chú ý: Bài này không có giới hạn n và k. HÃY LÀM ĐƯỢC VỚI N CÀNG LỚN CÀNG TỐT (đây cũng chính là thang đo điểm cho bài làm)
Bài này được trích từ cuốn DSAPTextbook của thầy Lê Minh Hoàng và có được sửa đổi đi chút ít ở phần input/output
Bookmarks