canuc80k0400·1/50

Rút Tiền Gọn Nhất

Nộp bài trên LQDOJ

Bài 04 · Greedy

Một máy phát tiền chỉ có các mệnh giá và . Máy phải phát đúng số tiền nguyên dương . Hãy tìm số tờ ít nhất cần dùng.

Input

  • Dòng duy nhất chứa số nguyên .

Output

  • In ra số tờ tiền nhỏ nhất có tổng bằng .

Constraints

  • .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

286

Output

8

Giải thích: Có thể dùng hai tờ , bốn tờ , một tờ và một tờ , tổng cộng tám tờ. Không thể thay phần tiền nào bằng ít tờ hơn với các mệnh giá đã cho.

Lời giải tóm tắt
  • Phân tích: Với hệ mệnh giá 1, 5, 10, 20, 100, mỗi tờ lớn thay thế được ít nhất hai tờ nhỏ hơn. Vì vậy, khi phần tiền còn lại đủ cho một tờ lớn, dùng tờ đó không thể làm đáp án xấu đi.
  • Thuật toán: Duyệt các mệnh giá theo thứ tự giảm dần. Với mệnh giá d, lấy n / d tờ rồi thay n bằng n mod d.
  • Chứng minh: Xét mệnh giá lớn nhất còn đang xử lý. Nếu một phương án dùng ít hơn số tờ tối đa có thể lấy của mệnh giá này, phần giá trị thiếu phải được bù bằng ít nhất hai tờ nhỏ hơn. Thay phần bù đó bằng một tờ lớn không tăng số tờ. Lặp lập luận cho số dư chứng minh thuật toán tối ưu.
  • Độ phức tạp: Thời gian O(1), bộ nhớ O(1).