题解 Disease Manangement 疾病管理
题解
本题是一个比较有变化的状压 \(DP\),方程很好想,不多赘述,留坑
#include<bits/stdc++.h>
#define lowbit(x) (x&(-x))
#define pe(x) (1<<(x))
#define p(i) ++i
#define ri register int
using namespace std;
inline int read() {
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
}
int s[1010],num[pe(15)],di;
int main() {
int n=read(),d=read(),k=read();
for (ri i(1);i<=n;p(i)) {
int st=read();
for (ri j(1);j<=st;p(j)) di=read(),s[i]|=pe(di-1);
}
num[0]=0;
int ans=0;
for (ri i(0);i<pe(d);p(i)) {
if (i) num[i]=num[i^lowbit(i)]+1;
if (num[i]>k) continue;
int sum=0;
for (ri j(1);j<=n;p(j)) {
if ((s[j]&i)==s[j]) sum++;
}
ans=max(ans,sum);
}
printf("%d\n",ans);
return 0;
}