Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program doitien;
- const fi='doitien.inp';
- fo='doitien.out';
- nmax=20;
- var a:array[1..20] of word;
- n:byte;
- m,s:longint;
- f:text;
- KQmin,KQ:array[1..20] of longint;
- sl,slmin:longint;
- procedure docfile;
- var i:byte;
- begin
- assign(f,fi); reset(f);
- readln(f,n,m);
- for i:=1 to n do
- read(f,a[i]);
- close(f);
- end;
- procedure sort(l,r: longint);
- var
- i,j,x,y: longint;
- begin
- i:=l;
- j:=r;
- x:=a[(l+r) div 2];
- repeat
- while a[i]>x do
- inc(i);
- while x>a[j] do
- dec(j);
- if not(i>j) then
- begin
- y:=a[i];
- a[i]:=a[j];
- a[j]:=y;
- inc(i);
- j:=j-1;
- end;
- until i>j;
- if l<j then
- sort(l,j);
- if i<r then
- sort(i,r);
- end;
- procedure init;
- begin
- fillchar(kq,sizeof(kq),0);
- s:=0;
- sl:=0;
- slmin:=maxlongint;
- end;
- procedure try(i:byte);
- var j:byte;
- begin
- if s=m then
- begin
- kqmin:=kq;
- slmin:=sl;
- end
- else
- for j:=1 to n do
- if (s+a[j]<=m) and (sl<slmin) then
- begin
- inc(s,a[j]);
- inc(sl);
- inc(kq[j]);
- try(j);
- dec(kq[j]);
- dec(sl);
- dec(s,a[j]);
- end;
- end;
- procedure xuat;
- var i:byte;
- begin
- assign(f,fo); rewrite(f);
- if slmin<>maxlongint then
- begin
- writeln(f,slmin);
- for i:=1 to n do
- if kqmin[i]<>0 then
- writeln(f,a[i],' ',kqmin[i]);
- end
- else
- writeln(f,'KO TIM DC');
- close(f);
- end;
- begin
- docfile;
- sort(1,n);
- init;
- try(0); // try may cung dc, chi la cai bat dau thoi, ko qan trong
- xuat;
- //readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement