题目
选拔战士 Description 小J手下有N个战士(1<=N<=1000),每个战士都有若干种特异功能,这些功能从1开始编号,至多15种
如 果战士们所有的特异功能总类别数超过K的话,小J管不住他们了。
现在小J希望找出尽可能多的战士出来,但他们的特异功能不能超过K。
Format
Input 第一行输入N,D,K ,代表共有N个战士,特异功能共有D种,K的含义如上所述
下面N行,用于描述这N个战士的情况,格式如下: 先给出当前这个战士所有的特异功能,然后再给些它们的编号分别是多少.
Output
如题
Samples
输入数据 1
6 3 2
0
1 1
1 2
1 3
2 2 1
2 2 1
输出数据 1
5
本人代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k,s=0,a[30],b[1000]={1},c[1000][30];
void f(int x,int sum1){
if(sum1<=k) {
int sum=0;
for(int i=1;i<=n;i++) {
for(int j=0;j<=m;j++){
if(b[j]&&c[j][i]>=1) {
sum ++;
break;
}
}
}
s = max(s,sum);
}
if(sum1>k||x>m) return ;
b[x] = 1;
f(x+1,sum1+1);
b[x] = 0;
f(x+1,sum1);
}
signed main(){
int p,q;
cin>>n>>m>>k;
s = 0;
for(int j=1;j<=n;j++) {
cin>>q;
for(int i=1;i<=q;i++) {
cin>>p;
c[p][j] ++;
}
if(q==0) c[0][j] ++;
}
f(1,0);
cout<<s<<endl;
return 0;
}