题目
分析
代码
1 #include<iostream>
2 #include<vector>
3 using namespace std;
4 long long v[1010];
5 long long f[1010];
6 int t[500000];
7 void take(int n)
8 {
9 for (int i=0;i<=(1<<n);i++)
10 {
11 int ii=i;
12 while (ii)
13 {
14 t[i]++;
15 ii-=(ii&(-ii));
16 }
17 }
18 }
19 int main ()
20 {
21 int n,d,k;
22 cin>>n>>d>>k;
23 for (int i=1,x;i<=n;i++)
24 {
25 cin>>x;
26 for (int j=1,a;j<=x;j++)
27 {
28 cin>>a;
29 v[i]=v[i]|(1<<(a-1));
30 }
31 }
32 take(d);
33 int sum,ans=-10000;
34 for (int i=0;i<=(1<<d);i++)
35 {
36 sum=0;
37 if (t[i]>k) continue;
38 for (int j=1;j<=n;j++)
39 {
40 if ((v[j]&i)==v[j])
41 sum++;
42 }
43 ans=max(ans,sum);
44 }
45 cout<<ans;
46 }