QJ3854 - Trả lại tiền thừa
Xem dưới dạng PDFLan là một người yêu thích thuật toán, lần này cậu đến hiệu sách để chọn sách về lập trình thi đấu.
Lần này cậu mang tổng cộng $x$ đồng đến hiệu sách mua sách, nhân viên hiệu sách cần chuẩn bị tiền lẻ để thối lại. Trong kho của cửa hàng có $n$ loại mệnh giá tiền lẻ, mỗi loại có vô hạn tờ.
Yêu cầu:
Số tiền lẻ chuẩn bị phải ghép được mọi số tiền từ 1 đến $x$ (bao gồm cả hai mức $1$ và $x$).
Số tờ tiền mang theo phải ít nhất có thể
Nếu không thể thỏa mãn điều kiện, in ra $-1$
Dữ liệu vào
Dòng đầu tiên: hai số nguyên $n, x$
Dòng thứ hai: $n$ số nguyên dương, biểu thị mệnh giá của $n$ loại tiền lẻ
Dữ liệu ra
In ra số tờ tiền lẻ ít nhất cần mang theo; nếu vô nghiệm thì in ra $-1$
Ví dụ
Input
3 9
1 2 3
Output
4
Ghi chú
Giải thích ví dụ
Chọn: 2 tờ mệnh giá 3 + mỗi loại 1 tờ mệnh giá 1 và mệnh giá 2, tổng cộng 4 tờ, có thể ghép ra mọi số tiền từ 1~9.
Giới hạn dữ liệu
$1 \le n \le 10^6$
$1 \le x \le 10^{18}$
$1 \le a_i \le 10^9$
Đây là một bài tham lam kinh điển, ý tưởng giải chính:
Trước tiên sắp xếp các mệnh giá từ nhỏ đến lớn
Bắt buộc phải có mệnh giá 1, nếu không thì vô nghiệm ngay
Dùng chiến lược tham lam để mở rộng dần số tiền lớn nhất có thể phủ được, đếm số tờ tiền ít nhất
Nhận xét