状压dp。其实就是无脑暴力…
【代码】
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
int read()
{
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
}
int n,m,K,ans;
int a[1010],f[32768];
bool Flag[32768];
bool Judge(int x)
{
int sum=0;
for(int i=0;i<m;i++) if(x&(1<<i)) sum++;
return sum<=K;
}
int main()
{
n=read();m=read();K=read();
for(int i=1;i<=n;i++)
{
static int num;
num=read();
while(num--)
a[i]+=(1<<(read()-1));
}
for(int j=0;j<1<<m;j++) if(Judge(j)) Flag[j]=1;
for(int i=1;i<=n;i++)
for(int j=0;j<1<<m;j++) if(Flag[j])
if((a[i]|j)==j) f[j]++;
for(int i=0;i<1<<m;i++) ans=max(ans,f[i]);
printf("%d\n",ans);
return 0;
}