python-021Đọc toàn bộ đề miễn phí

Quy hoạch động bài toán Cái ba lô 0/1

DP[i][w] = max(DP[i-1][w], DP[i-1][w - weight[i]] + value[i])

PythonTrung bình25 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

dynamic programmingknapsackspace optimization

Kiến thức tiên quyết: dp table, recursion with memo.

Nội dung đề bài

Mục tiêu kiến thức

  • Hiểu công thức truy hồi quy hoạch động bài toán Cái ba lô 0/1:

DP[i][w] = max(DP[i-1][w], DP[i-1][w - weight[i]] + value[i])

  • Kỹ thuật tối ưu hóa không gian bộ nhớ từ bảng 2D O(N × W) xuống mảng 1D O(W) bằng cách duyệt ngược từ capacity về weight.
  • Xử lý ngoại lệ ValueError khi dung lượng sức chứa âm.

Mô tả bài toán

Hệ thống quản lý VRAM tại AI Empire Academy cần nạp các mô hình AI vào bộ nhớ card đồ họa GPU có dung lượng giới hạn capacity (tính bằng MB). Mỗi mô hình thứ i chiếm dung lượng weights[i] và đem lại giá trị điểm chất lượng values[i]. Mỗi mô hình chỉ được chọn tối đa đúng một lần (0 hoặc 1).

Hãy viết hàm knapsack_01(weights: list[int], values: list[int], capacity: int) -> int tính tổng giá trị lớn nhất có thể đạt được mà tổng trọng lượng không vượt quá capacity.

Quy tắc bắt lỗi:

  • Nếu capacity < 0, hàm phải ném ra ngoại lệ ValueError("Suc chua khong the am").
  • Nếu danh sách rỗng hoặc capacity == 0, trả về 0.

Input

  • weights: Danh sách số nguyên dương là trọng lượng của các đồ vật.
  • values: Danh sách số nguyên dương là giá trị của các đồ vật.
  • capacity: Sức chứa tối đa của ba lô (int).

Output

Số nguyên int là tổng giá trị lớn nhất có thể thu được.

Ràng buộc

  • 0 ≤ len(weights) == len(values) ≤ 200.
  • 1 ≤ weights[i], values[i] ≤ 104.
  • -104 ≤ capacity ≤ 2000.
  • Thời gian chạy tối đa: 1000ms.
  • Giới hạn bộ nhớ: 256MB.

Ví dụ 1

Input

`weights = [2, 3, 4, 5], values = [3, 4, 5, 6], capacity = 5`

Output

`7`

Giải thích

Chọn đồ vật 1 (nặng 2, giá trị 3) và đồ vật 2 (nặng 3, giá trị 4). Tổng trọng lượng là 2 + 3 = 5 ≤ 5, tổng giá trị là 3 + 4 = 7.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.