1 #include <iostream> 2 #include <algorithm> 3 #include <cmath> 4 #define MAXN 1000 5 #define M_15 15 6 using namespace std; 7 8 int _b[M_15]; 9 struct node 10 { 11 int tot; 12 int v; 13 int d[15]; 14 node() 15 { 16 v = 0; 17 tot = 0; 18 } 19 }; 20 21 void fun_3(); 22 node _[MAXN]; 23 int fun_2(int sum); 24 int fun_1(int d,int k); 25 int n; 26 int d; 27 int main() 28 { 29 //freopen("acm.acm","r",stdin); 30 31 int k; 32 int i; 33 int j; 34 int p; 35 int tem; 36 cin>>n; 37 cin>>d; 38 cin>>k; 39 40 for(i = 0; i < n; ++ i) 41 { 42 cin>>_[i].tot; 43 for(j = 0; j < _[i].tot; ++ j) 44 { 45 //cin>>_[i].d[j]; 46 cin>>tem; 47 _[i].d[tem-1] = 1; 48 } 49 } 50 fun_3(); 51 cout<<fun_1(d,k)<<endl; 52 } 53 54 int fun_1(int d,int k) 55 { 56 int i; 57 int j; 58 int sum; 59 int max = -1; 60 for(i = 0; i < k; ++ i) 61 { 62 _b[i] = 1; 63 } 64 sort(_b,_b+d); 65 sum = 0; 66 int tem = 0; 67 for(i = d-1; i >= 0; -- i) 68 { 69 sum += _b[i]*pow((double)2,tem); 70 ++ tem; 71 } 72 // cout<<sum<<endl; 73 if((tem = fun_2(sum) ) > max) 74 { 75 max = tem; 76 } 77 // cout<<tem<<endl; 78 while(next_permutation(_b,_b+d)) 79 { 80 sum = 0; 81 int tem = 0; 82 for(i = d-1; i >= 0; -- i) 83 { 84 sum += _b[i]*pow((double)2,tem); 85 ++ tem; 86 } 87 // cout<<sum<<endl; 88 tem = fun_2(sum); 89 // cout<<tem<<endl; 90 if(tem > max) 91 { 92 max = tem; 93 } 94 } 95 return max; 96 97 } 98 99 int fun_2(int sum) 100 { 101 int i; 102 int j; 103 int t = 0; 104 for(i = 0; i < n; ++ i) 105 { 106 if(sum == (sum|_[i].v) ) 107 { 108 ++ t; 109 } 110 // cout<<sum<<"_"<<_[i].v<<endl; 111 } 112 // cout<<"000000000000000000000————————"<<t<<endl; 113 return t; 114 } 115 116 void fun_3() 117 { 118 int tem = 0; 119 int i; 120 int j; 121 for(i = 0; i < n; ++ i) 122 { 123 tem = 0; 124 for(j = d-1; j >= 0; -- j) 125 { 126 _[i].v += _[i].d[j]*pow((double)2,tem); 127 ++ tem; 128 } 129 // cout<<_[i].v<<endl; 130 // cout<<" d "<<d<<endl; 131 } 132 }