Dynamic programming (DP) giải các bài toán có bài toán con chồng lấn (overlapping subproblems) và optimal substructure bằng cách tính mỗi bài toán con một lần và tái sử dụng kết quả. Hai phong cách là memoization (top-down) và tabulation (bottom-up).
Ý tưởng
Đệ quy thô sơ tính lại cùng các bài toán con theo cấp số mũ. DP lưu đệm chúng, thu gọn khối lượng công việc hàm mũ thành đa thức.
