题目
NH的最大比萨店为即将来临的节日准备了T种不同口味的原料,但考虑到NH人的口味和其他一些因素,原料的使用有N种限制。
T种不同原料的编号为1~T。一个限制如“5 3”即表示5号和3号口味的原料不能同时使用。此时使用三种原料3,5,6的比萨是不允许的。
现在请你帮忙计算在上面条件下,最多可以制作多少种不同的比萨(包括不添加任何口味的原料的)。
样例输入:
6 5
1 1
2 4 2
3 3 2 6
1 5
3 3 4 6
样例输出:
10
样例解释:
无加料
2
2和3
2和6
3
3和4
3和6
4
4和6
6
数据范围:
1<=T<=20
1<=N<=52
题解
暴力搜索出组合,然后判断(如果在某限制的所有数都在该组合中出现过,则该组合不符合要求)
时间复杂度O(2t∗n)
代码
var
t,n,i,j,k,ans:longint;
a:array[1..52,0..21]of longint;
b:string;
function night(b:string):boolean;
var
i,j,k:longint;
c:char;
begin
night:=true;
for i:=1 to n do
begin
k:=1;
for j:=1 to a[i,0] do
begin
c:=chr(a[i,j]+48);
if pos(c,b)=0 then k:=0;
end;
if k=1 then exit(false);
end;
end;
procedure dfs(k,s:longint);
var
i,j,c:longint;
begin
inc(ans);
for i:=k to t do
begin
b:=b+chr(i+48);
if night(b) then dfs(i+1,s+1);
delete(b,s,1);
end;
end;
begin
readln(t,n);
for i:=1 to n do
begin
read(k);
a[i,0]:=k;
for j:=1 to k do
read(a[i,j]);
readln;
end;
dfs(1,1);
writeln(ans);
end.