Hướng dẫn giải của Cái giá

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người làm lời giải.


Nộp code mẫu trước khi tự giải được bài tập là một hành vi có thể bị ban.

Có thể giải bài toán bằng phương pháp duyệt toàn bộ như sau:

  • Dùng một dãy nhị phân độ dài ~n: X[1], X[2], ..., X[n]~ để biểu diễn cho một phương án chọn các đồ vật đem đặt lên giá, trong đó ~X[i] = 1~ nếu đồ vật thứ ~i~ được chọn đặt lên giá, ~X[i] = 0~ nếu đồ vật thứ ~i~ không được chọn đặt lên giá. Ví dụ, với ~n = 3~, dãy nhị phân ~011~ biểu thị rằng: đồ vật thứ ~1~ không chọn đặt lên giá, đồ vật thứ ~2~ được chọn đặt lên giá, đồ vật thứ ~3~ được chọn đặt lên giá.

  • Để liệt kê tất cả các khả năng của bài toán ta sẽ liệt kê tất cả các dãy nhị phân độ dài ~n~. Ứng với mỗi dãy nhị phân liệt kê được, ta tính tổng ~S~ khối lượng các đồ vật đem đặt lên giá (tổng khối lượng các đồ vật có ~X[i] = 1~).

    • Gọi ~S_{max}~ là tổng khối lượng các đồ vật để được lên giá lớn nhất.
    • Khởi tạo ban đầu ~S_{max} = 0~ (kỷ lục ban đầu là ~0~)
    • Có hai trường hợp:
      • Nếu ~S>W~ thì khả năng đang xét không là nghiệm (bỏ qua)
      • Nếu ~S \leq W~, ta so sánh ~S~ với giá trị ~S_{max}~ (~S_{max}~ là tổng khối lượng các đồ vật để được lên giá lớn nhất, ~S_{max}~ được khởi tạo ban đầu là ~0~). Nếu ~S > S_{max}~ thì cập nhật ~S_{max} = S~; (ghi nhận kỷ lục mới)
  • Nghiệm của bài toán là ~S_{max}~.


Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.