Cho danh sách bricks (độ dài từng viên gạch, chiều rộng = 1), chiều rộng width và cao height. Đếm số cách xếp gạch ngang đầy khung width x height (có thể tái sử dụng gạch).
Ví dụ: bricks=[2,1], width=3, height=2 → 9 cách.
Giải thuật (Quy hoạch động)
w[i]= số cách tạo độ rộngicho một hàng- Khởi tạo
w[0]=1, các vị trí khác = 0 - Duyệt
itừ 0 đếnwidth: nếuw[i]>0, thử thêm mỗi loại gạchx→w[i+x] += w[i] - Số cách cho toàn bộ tường =
w[width]^height
Ví dụ triển khai
def solve(bricks, width, height):
w = [1] + [0] * width
for i in range(width):
if w[i]:
for x in bricks:
if i + x <= width:
w[i + x] += w[i]
return w[width] ** height
print(solve([2, 1], 3, 2))
Đầu vào
[2, 1], 3, 2
Đầu ra
9