Hướng dẫn thuật toán

Trùm CUỐI 2026-01-15 0:51:57

Link bài tập

Dưới đây là hướng dẫn giải bài toán Xâu con chung dài nhất (LCS) theo quy trình 3 bước của Quy hoạch động:

1. Định nghĩa trạng thái

Gọi dp[i][j] là độ dài của xâu con chung dài nhất của xâu con A gồm i ký tự đầu tiên ( A[1...i] ) và xâu con B gồm j ký tự đầu tiên ( B[1...j] ).

  • Chỉ số i chạy từ 0 đến n (độ dài xâu A ).
  • Chỉ số j chạy từ 0 đến m (độ dài xâu B ).
  • Kết quả cuối cùng của bài toán sẽ nằm ở dp[n][m] .

2. Công thức chuyển trạng thái

Để tính dp[i][j] , ta xét ký tự cuối cùng hiện tại của hai xâu là A[i] B[j] :

  • Trường hợp 1: Nếu ký tự A[i] = B[j]

    • Ký tự này chắc chắn thuộc xâu con chung dài nhất.
    • Công thức: dp[i][j] = dp[i-1][j-1] + 1
    • (Ý nghĩa: Lấy kết quả của hai xâu trước đó rồi cộng thêm 1 đơn vị cho ký tự trùng nhau vừa tìm thấy).
  • Trường hợp 2: Nếu ký tự A[i] \neq B[j]

    • Ký tự cuối của ít nhất một trong hai xâu không thuộc xâu con chung đang xét (hoặc cả hai đều không thuộc). Ta sẽ chọn kết quả tốt nhất khi bỏ đi A[i] hoặc bỏ đi B[j] .
    • Công thức: dp[i][j] = \max(dp[i-1][j], dp[i][j-1])

3. Trạng thái cơ sở

Trạng thái cơ sở là khi một trong hai xâu là xâu rỗng (độ dài bằng 0). Khi đó, xâu con chung của chúng chắc chắn có độ dài bằng 0.

  • dp[0][j] = 0 với mọi 0 \leq j \leq m (Xâu A rỗng).
  • dp[i][0] = 0 với mọi 0 \leq i \leq n (Xâu B rỗng).

Đánh giá độ phức tạp: O(n \times m) .