题目
解题思路
深度优先搜索。
代码
#include<cstdio>
#include<cstring>
using namespace std;
int n,t,ans; bool tg[101];
struct node{
int len; bool b[101];
}a[101];
bool ok(int lgg)
{
for (int j=1;j<=n;j++)
{
int sum=0;
for (int i=1;i<=t;i++)
if (tg[i]&&a[j].b[i]) sum++;
if (sum==a[j].len) return false;
}
return true;
}
void dfs(int lle)
{
ans++;
for (int i=lle+1;i<=t;i++)
{
tg[i]=true;
if (ok(i)) dfs(i);
tg[i]=false;
}
}
int main()
{
freopen("pizza.in","r",stdin);
freopen("pizza.out","w",stdout);
scanf("%d%d",&t,&n);
for (int i=1;i<=n;i++)
{
scanf("%d",&a[i].len); int q;
for (int j=1;j<=a[i].len;j++)
scanf("%d",&q),a[i].b[q]=true;
}
dfs(0);
printf("%d",ans);
}