cpp-279Đọc toàn bộ đề miễn phí

Đổi tiền bằng ít đồng xu nhất

Bạn có một danh sách mệnh giá đồng xu và không hạn chế số lượng mỗi loại. Câu hỏi đặt ra là

C++Cơ bản15 phút

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

Điểm và code bạn nộp đượ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-programmingcoin-changeminimisationentry-ramp

Kiến thức tiên quyết: cpp-basics, arrays.

Nội dung đề bài

Mô tả bài toán

Bạn có một danh sách mệnh giá đồng xu và không hạn chế số lượng mỗi loại. Câu hỏi đặt ra là dùng ít đồng xu nhất để đổi đúng một số tiền cho trước. Đây là ví dụ đầu tiên cho thấy quy hoạch động thắng được cách chọn tham lam lớn nhất trước.

Yêu cầu

Cho m loại đồng xu và số tiền t. Hãy tìm số đồng xu nhỏ nhất có tổng đúng bằng t. Nếu không có cách đổi nào thì in ra -1.

Quy ước nộp bài

Nộp tệp solution.cpp đọc dữ liệu từ stdin và ghi kết quả ra stdout. In đúng một số nguyên, không in thêm chữ hay dấu cách thừa.

Input

  • Dòng thứ nhất: hai số nguyên m và t (1 <= m <= 20, 1 <= t <= 500).
  • Dòng thứ hai: m số nguyên là mệnh giá các đồng xu (1 <= giá trị <= 500), cách nhau

bởi dấu cách. Mỗi mệnh giá được dùng bao nhiêu lần cũng được.

Output

  • Một số nguyên trên một dòng: số đồng xu ít nhất, hoặc -1 nếu không đổi được.

Ràng buộc

  • Mỗi loại đồng xu có vô số bản sao, không có ràng buộc "mỗi loại dùng tối đa một lần".
  • Thời gian cho mỗi bộ dữ liệu là 1 giây.

Ví dụ 1

Input

3 6
1 3 4

Output

2

Ví dụ 2

Input

3 11
1 3 4

Output

3

Giải thích

Ta đổi 6 bằng hai đồng 3 + 3 nên in ra:

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.

Nhóm Zalo