AC代码:
#include<iostream>
#define MAX 100
using namespace std;
int search_for_kids(int *temp,int count);
struct c
{
int n;
int kid[MAX];
}kids[MAX];
int n,m,k;
int main()
{
int temp[MAX]={0};
int i,j;
cin>>n>>m>>k;
for(i=0;i<n;++i)
{
cin>>kids[i].n;
for(j=0;j<kids[i].n;++j)
{
cin>>kids[i].kid[j];
}
}
// cout<<" m = "<<m<<endl;
int count=0,max=-9999;
for(i=0;i<(1<<k);++i)
{
count=0;
for(j=0;j<k;++j)
{
if(i&(1<<j))
{
temp[count]=j+1;
count++;
}
}
//cout<<"count = "<<count<<endl;
if(count == m)
{
if(search_for_kids(temp,count)>max)
{
max = search_for_kids(temp,count);
}
//cout<<"max = " <<max<<endl;
}
}
cout<<max;
return 0;
}
int search_for_kids(int *temp,int count)
{
int i,j,k,flag=1,sum=0;
/*
for(i=0;i<count;i++)
{
cout<<temp[i]<<" ";
}
*/
//cout<<endl;
for(i=0;i<n;i++)
{
flag=0;
for(j=0;j<kids[i].n;++j)
{
// cout<<"kid "<<i<<" : "<<kids[i].kid[j]<<" ";
for(k=0;k<count;k++)
{
if(kids[i].kid[j]==temp[k])
{
flag++;
}
}
}
if(flag == j)
{
sum++;
}
//cout<<endl;
}
return sum;
}