Cod sursa(job #37665)

Utilizator CezarMocanCezar Mocan CezarMocan Data 25 martie 2007 11:43:56
Problema Shop Scor 0
Compilator fpc Status done
Runda preONI 2007, Runda 4, Clasa a 9-a si gimnaziu Marime 1.76 kb
type ban=record
                a,min:int64;
                end;
var v,x:array[1..33]of ban;
    s,smin:array[1..33]of int64;
    n,c,i,j,t,nr,nmin:longint;
    l:int64;
    aux:ban;

procedure back(k:longint);
var i:longint;
    su:int64;
begin
if k=n then
        begin
        su:=0;
        for i:=1 to k do
                su:=su+v[i].a*s[i];
        if su=l then
                begin
                nmin:=0;
                for i:=1 to k do
                        nmin:=nmin+s[i];
                smin:=s;
                exit;
                end;
        end
else
        begin
        for i:=1 to v[k+1].min do
                begin
                s[k+1]:=i;
                back(k+1);
                end;
        end;
end;

begin
assign(input,'shop.in');reset(input);
assign(output,'shop.out');rewrite(output);
readln(n,c,l);
for i:=1 to n do
        read(v[i].a,v[i].min);
for i:=1 to n do
        begin
        t:=1;
        for j:=1 to v[i].a do
                t:=t*c;
        v[i].a:=t;
        end;
for i:=1 to n do
        if l div v[i].a<v[i].min then
                v[i].min:=l div v[i].a;
x:=v;
for i:=1 to n do
        for j:=i+1 to n do
                if v[i].a<v[j].a then
                        begin
                        aux:=v[i];
                        v[i]:=v[j];
                        v[j]:=aux;
                        end;
back(0);
writeln(nmin);
for i:=1 to n do
        begin
        for j:=1 to n do
                if (v[i].a=x[j].a)and(v[i].min=x[j].min) then
                        begin
                        s[j]:=smin[i];
                        break;
                        end;
        end;
for i:=1 to n do
        write(s[i],' ');
close(input);close(output);
end.