思路:状压dp,枚举疾病的集合,然后判断一下可行性即可。
#include<bits/stdc++.h>
using namespace std;
#define maxs 400000
#define maxn 1900 int n,d,k;
int a[maxn],f[maxs],num[maxs]; int main(){
scanf("%d%d%d",&n,&d,&k);
for (int i=;i<(<<d);i++) num[i]=num[i>>]+(i&);
for (int i=,len;i<=n;i++){
scanf("%d",&len);
for (int j=,x;j<=len;j++) scanf("%d",&x),a[i]+=(<<(x-));
}
int ans=;
for (int i=;i<=n;i++)
for (int j=(<<d)-;j>=;j--)
if (num[j|a[i]]<=k) f[j|a[i]]=max(f[j|a[i]],f[j]+),ans=max(ans,f[j|a[i]]);
printf("%d\n",ans);
return ;
}