Разбор задачи 1201. Подарки
Если мы выбрали
`k` классов, то для получения числа вариантов нужно перемножить число категорий в выбранных классах.
Для получения общего количества вариантов нужно просуммировать число вариантов по всем наборам из
`k` классов.
var
s:int64; { Общее количество вариантов }
a:array[1..20] of integer;
b:array[1..20] of boolean;
k,n,j:integer;
procedure gen(i,m:integer);
var
j:integer;
p:int64;
begin
if i>n then
begin
p:=1;
for j:=1 to n do
if b[j] then
p:=p*a[j]; { перемножаем число вариантов для выбранных k классов }
s:=s+p; { добавляем к общему итогу }
exit;
end;
if (n-i)>=(k-m) then
begin
b[i]:=false;
gen(i+1,m);
end;
if m<k then
begin
b[i]:=1;
gen(i+1,m+1);
end;
end;
begin
readln(n,k);
for j:=1 to n do
read(a[j]);
gen(1,0);
writeln(s);
end.