10.6 比萨 2408

题目

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(2tn)

代码

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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值