Skip to Content
🧮 CTDL & Giải thuật💡 Quy hoạch động

Quy hoạch động (Dynamic Programming)

DP là gì?

Dynamic Programming là kỹ thuật giải bài toán bằng cách:

  1. Chia thành bài toán con chồng chéo
  2. Lưu kết quả để tránh tính lại
  3. Xây dựng nghiệm từ các bài toán con

Top-Down (Memoization)

from functools import lru_cache @lru_cache(maxsize=None) def fib(n): if n <= 1: return n return fib(n - 1) + fib(n - 2)

Bottom-Up (Tabulation)

def fib_tab(n): if n <= 1: return n dp = [0] * (n + 1) dp[1] = 1 for i in range(2, n + 1): dp[i] = dp[i - 1] + dp[i - 2] return dp[n]

Coin Change

def coin_change(coins, amount): dp = [float('inf')] * (amount + 1) dp[0] = 0 for i in range(1, amount + 1): for coin in coins: if coin <= i: dp[i] = min(dp[i], dp[i - coin] + 1) return dp[amount] if dp[amount] != float('inf') else -1
💡

Framework DP: Xác định state → Base case → Transition → Answer


Tiếp theo: Thuật toán tham lam

Last updated on