1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài toán đổi tiền

2 1,8K 12

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 2
Dung lượng 16,58 KB

Nội dung

Muốn đổi một lượng tiền M đơn vị.. Hỏi phải đổi như thế nào để có số tờ tiền là ít nhất.. Gọi minD[I] là số lượng tờ tiền ít nhất để trả số tiền I, như vậy bài toán yêu cầu chúng ta xác

Trang 1

Bài toán Đổi tiền: Giả sử trong kho bạc có N loại tiền có mệnh giá lần lượt là

D[1], D[2], , D[N] đơn vị Muốn đổi một lượng tiền M đơn vị Hỏi phải đổi như thế nào để có số tờ tiền là ít nhất

Dữ liệu vào:

Nhâp vao 2 so N, M

Nhập vào N số : D[1], D[2],…,D[n]

Gọi minD[I] là số lượng tờ tiền ít nhất để trả số tiền I, như vậy bài toán yêu cầu chúng

ta xác định minD[M] Ta nhận thấy rằng để được số tiền là I thì chúng ta sẽ có các cách để tạo thành số tiền đó khi chúng ta thêm một tờ là:

I-D[K1], I-D[K2],…, I-D[KJ], trong đó KJ là số thỏa mãn mà D[KJ]<I Vậy số tiền tối ưu nhất là chúng ta cần tìm thấy trong các minD[I-D[K1]]+1, minD[I-D[K2]]+1,

… , minD[I-D[KJ]]+1 Có công thức quy hoạch động như sau:

minD[I]:=Min(minD[I-D[J]]+1), J thỏa mãn: D[J]<I

Từ đó chúng ta có thủ tục quy hoạch động như sau:

quyHoachDong{

minD[0]:=0;

for(int I=1;i<=M;i++){

Min:=maxint;

If ((minD[I-D[J])+1< Min) && (D[J]<I){

Min:=minD[I-D[J]]+1;

Luu[I]:=J;

} minD[I]:=Min;

}

}

Trong đó mảng Luu là mảng chứa các loại tiền nào cần dùng cuối cùng để đến số tiền

I Như vậy chúng ta có cách để tìm lại các loại tiền cần dùng bằng mảng Luu như sau:

Trang 2

I:=M;

While(J!=0){

Printf(D[J]); I:=I-J;

J:=Luu[i]; }

Ngày đăng: 29/05/2014, 23:05

TỪ KHÓA LIÊN QUAN

w