2019-01-01 14:15:29 +03:00
|
|
|
|
// Задача о ранце. В массиве B заданы веса предметов.
|
2015-12-28 14:25:15 +03:00
|
|
|
|
// Выдать все варианты полной комплектации ранца частью этих предметов
|
2015-05-14 22:35:07 +03:00
|
|
|
|
const Sz=100;
|
|
|
|
|
|
|
|
|
|
|
|
type IntArr = array [1..Sz] of integer;
|
|
|
|
|
|
|
|
|
|
|
|
procedure PrintArr(const A: IntArr; n: integer);
|
|
|
|
|
|
begin
|
|
|
|
|
|
for var i:=1 to n do
|
2019-01-01 14:15:29 +03:00
|
|
|
|
Print(A[i]);
|
|
|
|
|
|
Println;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TrySolve(n: integer; const B: IntArr; nb: integer);
|
|
|
|
|
|
var
|
|
|
|
|
|
Subset: IntArr;
|
|
|
|
|
|
space: integer;
|
|
|
|
|
|
ns: integer;
|
|
|
|
|
|
|
|
|
|
|
|
procedure TrySolve0(i: integer);
|
|
|
|
|
|
begin
|
|
|
|
|
|
if space=0 then
|
|
|
|
|
|
PrintArr(Subset,ns)
|
|
|
|
|
|
else if (space<0) or (i>nb) then
|
2015-12-28 14:25:15 +03:00
|
|
|
|
exit // отсечение
|
|
|
|
|
|
else // продолжение перебора всех подмножеств множества B
|
2015-05-14 22:35:07 +03:00
|
|
|
|
begin
|
2015-12-28 14:25:15 +03:00
|
|
|
|
TrySolve0(i+1); // попробовать не взять i-тый элемент
|
2015-05-14 22:35:07 +03:00
|
|
|
|
|
|
|
|
|
|
ns += 1;
|
|
|
|
|
|
Subset[ns] := B[i];
|
|
|
|
|
|
space := space - B[i];
|
2015-12-28 14:25:15 +03:00
|
|
|
|
TrySolve0(i+1); // попробовать взять i-тый элемент
|
2015-05-14 22:35:07 +03:00
|
|
|
|
space := space + B[i];
|
|
|
|
|
|
ns -= 1;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
|
space:=n;
|
|
|
|
|
|
TrySolve0(1);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure FillArr(var B: IntArr; var n: integer);
|
|
|
|
|
|
begin
|
2015-12-28 14:25:15 +03:00
|
|
|
|
n:=5; // количество предметов
|
|
|
|
|
|
B[1]:=8; B[2]:=5; B[3]:=13; B[4]:=3; B[5]:=15; // веса предметов
|
2015-05-14 22:35:07 +03:00
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
var
|
|
|
|
|
|
B: IntArr;
|
|
|
|
|
|
nb: integer;
|
|
|
|
|
|
|
|
|
|
|
|
begin
|
|
|
|
|
|
FillArr(B,nb);
|
|
|
|
|
|
TrySolve(23,B,5);
|
|
|
|
|
|
end.
|