AI Empire Academy
CHUYÊN ĐỀ C++ THỰC CHIẾN

Bài tập Quy hoạch động (Dynamic Programming) trong C++

Quy hoạch động là linh hồn của các kỳ thi học sinh giỏi Tin học và lập trình thi đấu. Luyện tập phân rã bài toán, thiết lập công thức truy hồi và tối ưu độ phức tạp.

32

bài tập có chấm code

Bài tập theo chuyên đề, có đề bài, ví dụ và starter code riêng.

0

cơ bản

Củng cố nền tảng và làm quen với kỹ thuật cốt lõi.

12

trung bình

Kết hợp nhiều bước suy luận để vận dụng kiến thức.

20

nâng cao

Thử thách tối ưu, cấu trúc dữ liệu và thuật toán chuyên sâu.

Lộ trình thực hành đề xuất

Bước 1

DP 1 Chiều cơ bản

Các bài toán dãy số, bước nhảy, bài toán đổi tiền và mảng DP 1 chiều.

Bước 2

Dãy con tăng dài nhất (LIS)

Cài đặt LIS O(N²) và nâng cấp lên O(N log N) bằng tìm kiếm nhị phân.

Bước 3

Bài toán Cái ba lô (Knapsack)

Ba lô 0/1, ba lô vô hạn và kỹ thuật tối ưu mảng DP từ 2D xuống 1D.

Bước 4

Xâu con chung dài nhất (LCS)

Quy hoạch động trên xâu ký tự và truy vết chuỗi con chung.

Bước 5

DP Trạng thái (Bitmask DP)

Biểu diễn tập hợp con bằng bitmask để giải bài toán người du lịch TSP.

Lỗi thường gặp & Cách phòng tránh

•

Khởi tạo bảng DP bằng 0 thay vì giá trị vô cùng (-INF / +INF) trong bài toán tìm cực trị.

•

Duyệt ngược vòng lặp thể tích sai trong bài toán ba lô 0/1 làm một vật phẩm bị chọn nhiều lần.

Danh sách bài tập thực hành (32 bài)

Trong mỗi mức độ, bài tập được xếp từ dễ nhất đến khó nhất — hãy đi theo số bước.

Trung bình 12 bài

Vận dụng

Dùng một kỹ thuật quen thuộc: sắp xếp, tìm kiếm, đếm, ngăn xếp.

cpp-275Bước 2Trung bình

Tổng đoạn con lớn nhất (thuật toán Kadane)

Tìm đoạn con liên tiếp có tổng lớn nhất dạy tư duy quy hoạch động: tại mỗi vị trí chỉ cần biết đoạn tốt nhất kết thúc ở đây. Kadane giải trong O(N) thay vì thử mọi đoạn O(N2).

Kết hợp kỹ thuật

Phối hợp hai kỹ thuật trong cùng một lời giải.

Nâng cao 20 bài

Thử thách

Thuật toán chuyên sâu: quy hoạch động, đồ thị, cây.

Chuyên sâu

Cấu trúc dữ liệu nâng cao và nhiều bước chứng minh.

Tối ưu & chứng minh

Ràng buộc chặt về thời gian và bộ nhớ — mức thi đấu.