Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var
- ANS : array[1..100000] of integer;
- k: integer;
- type
- TCoinsSet = array[1..16] of integer;
- function AmountCoins(N: integer; M: integer; const A: TCoinsSet): integer;
- var
- MinAmount, CurAmount: integer;
- Sum: integer;
- k := 1;
- procedure Backtracking(NCoin: integer);
- var
- i: integer;
- begin
- if NCoin > M then
- Exit;
- if Sum > N then
- exit;
- for i := 0 to 2 do
- begin
- if Sum = N then
- begin
- if CurAmount < MinAmount then
- MinAmount := CurAmount;
- end;
- Backtracking(NCoin + 1);
- Inc(CurAmount);
- Sum := Sum + A[NCoin];
- ANS[k] := A[NCoin];
- Inc(k);
- end;
- Dec(CurAmount, 3);
- Sum := Sum - 3 * A[NCoin];
- end;
- begin
- MinAmount := M + M + 1;
- CurAmount := 0;
- Sum := 0;
- Backtracking(1);
- if MinAmount > M + M then
- MinAmount := 0;
- AmountCoins := MinAmount;
- end;
- var
- N: integer;
- M: integer;
- A: TCoinsSet;
- Summ: integer;
- i, j, ans1: integer;
- begin
- Summ := 0;
- readln(N, M);
- for i := 1 to M do
- begin
- Read(A[i]);
- Summ := Summ + A[i];
- end;
- if Summ + Summ < N then
- begin
- writeln('-1');
- end
- else
- begin
- ans1 := AmountCoins(N, M, A);
- writeln(ans1);
- for i := 1 to 10000 do
- begin
- write(ANS[i], ' ');
- if (ANS[i] = 0) then
- begin
- //writeln(ANS[i], ' i ', i, ' ans1 ', ans1);
- for j := i-ans1 to i-1 do
- begin
- writeln('!!!!!!!!!');
- write(ANS[j], ' ');
- end;
- break;
- end;
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement