Trở về đầu

foto1 foto2 foto3 foto4 foto5
Giảng viên
Nguyễn Tô Sơn - Thủ khoa Đại học Sư phạm Hà Nội
ĐT: 091.333.2869

HỌC TIN CÙNG THỦ KHOA

Thành công không phải đích đến, mà là cả một hành trình

Tìm kiếm

Đề bài: Ở đất nước Omega người ta chỉ tiêu tiền xu. Có N loại tiền xu, loại thứ i có mệnh giá là ai đồng. Một người khách du lịch đến Omega du lịch với số tiền M đồng. Ông ta muốn đổi số tiền đó ra tiền xu Omega để tiện tiêu dùng. Ông ta cũng muốn số đồng tiền đổi được là ít nhất (cho túi tiền đỡ nặng khi đi đây đi đó). Bạn hãy giúp ông ta tìm cách đổi tiền.

Mời các bạn download tại: Click here

const fi = 'DOITIEN.INP';
      fo = 'DOITIEN.OUT';
      MAXN = 10000;
      MAXW = 1000;
      oo = MAXINT div 2;
var f: text;
    n, m: integer;
    a: array[1..MAXN] of integer;
    L: array[0..MAXN, 0..MAXW] of integer;
    //L[i, j] la so dong tien khi doi

    procedure Nhap;
    var i: integer;
    begin
        assign(f, fi); reset(f);
        readln(f, n, m);
        for i:= 1 to n do
                readln(f, a[i]);
        close(f);
    end;

    function min(a, b: integer): integer;
    begin
        if a < b then exit(a)
                else exit(b);
    end;


    procedure QHD;
    var i, j: integer;
    begin
        for i:= 0 to n do L[i, 0]:= 0;
        for j:= 1 to m do L[0, j]:= +oo;
        // L[0, 0] = ?

        for i:= 1 to n do
                for j:= 1 to m do
                begin
                        L[i, j]:= L[i-1, j];
                        if a[i] <= j then
                                L[i, j]:= min(1 + L[i, j-a[i]],
                                              L[i-1, j]);
                end;
    end;

    procedure TruyVet(i, j: integer);
    var t:integer;
    begin
        if i = 0 then exit;
        if j = 0 then exit;
        if j >= a[i] then
        begin
                if L[i, j] = 1 + L[i, j-a[i]] then // Chon loai tien thu i
                begin
                        TruyVet(i, j-a[i]);

                        writeln(f, 'chon loai tien ', i,
                                ' menh gia la ', a[i]);
                end
                        else TruyVet(i-1, j);
        end
                else // Khong chon loai tien thu i
                        TruyVet(i-1, j);
    end;

    procedure InKQ;
    var i, j:integer;
    begin
        assign(f, fo); rewrite(f);
        if L[n, m] = +oo then writeln(f, 'khong co cach doi')
        else
        begin
                writeln(f, L[n, m]);
                TruyVet(n, m);
        end;

        close(f);
    end;

BEGIN
        Nhap;
        QHD;
        InKQ;
END.

Giảng viên Nguyễn Tô Sơn, Thủ khoa Đại học Sư phạm Hà Nội. Điện thoại: 091.333.2869