| Đệ quyrecursion | Học sinh viết được hàm gọi lại chính nó nhưng không tách được ba phần bắt buộc: trạng thái, điều kiện dừng và bước thu nhỏ bài toán. Đi sâu thì chạm trần độ sâu đệ quy của trình thông dịch và chương trình dừng giữa chừng. | Dạy theo khung ba phần cố định, luyện chuyển qua lại giữa đệ quy và vòng lặp để thấy rõ trạng thái, kèm cách xử lý khi độ sâu đệ quy vượt giới hạn mặc định. |
|---|
| Quay luibacktracking | Sinh cấu hình thì dễ, nhưng cắt nhánh sớm và tránh sinh trùng mới là chỗ mất điểm. Học sinh thường không ước lượng số trạng thái trước khi viết, nên bài chạy quá giới hạn thời gian. | Một khung quay lui dùng chung cho ba dạng bài chuẩn (hoán vị, tổ hợp, chia tập), cộng thói quen ước lượng số trạng thái trên giấy trước khi chạm bàn phím. |
|---|
| Nhánh cậnbranch and bound | Phải xây được một hàm cận vừa đúng vừa chặt. Cận sai thì cắt mất nghiệm tối ưu, cận lỏng thì chương trình không nhanh hơn quay lui thuần bao nhiêu — và cả hai kiểu hỏng đều khó nhận ra khi chấm. | Cách dựng hàm cận từ lời giải tham lam hoặc từ việc nới lỏng ràng buộc, cách chọn thứ tự duyệt, và cách đo hiệu quả cắt nhánh bằng số nút đã mở thay vì cảm tính. |
|---|
| Quy hoạch độngdynamic programming | Chỗ vướng nằm ở khâu đặt trạng thái. Học sinh thuộc công thức của bài mẫu nhưng không tự đặt được trạng thái cho bài mới, và hay lẫn giữa hai cách cài đặt từ trên xuống và từ dưới lên. | Lộ trình bài toán con chồng lặp đến bảng trạng thái rồi tới công thức truy hồi; viết bản từ trên xuống bằng ghi nhớ kết quả trước cho dễ kiểm tra, sau đó mới đổi sang bảng khi cần tiết kiệm bộ nhớ. Bài tập nhóm theo dạng trạng thái: dãy, ba lô, khoảng, mặt nạ bit. |
|---|
| Đồ thịgraphs | Nhiều thuật toán nhìn gần giống nhau nên học sinh chọn nhầm chỉ vì đọc sót một ràng buộc trong đề: trọng số âm, đồ thị vô hướng hay có hướng, số đỉnh và số cạnh ở mức nào. | Một bảng quyết định đi thẳng từ ràng buộc trong đề sang thuật toán phù hợp, kèm cách biểu diễn đồ thị và chọn cấu trúc dữ liệu đi kèm cho từng loại duyệt. |
|---|