分析:
这个题的状压DP还是比较裸的,考虑将疾病状压,得到DP方程:F[S]为疾病状态为S时的最多奶牛数量,F[S]=max{f[s]+1};
记得预处理出每个状态下疾病数是多少...
附上代码:
#include#include #include #include #include #include #include using namespace std;#define N 1005#define M 1<<15int f[M],a[N],K,n,m,num[M];int main(){ for(int i=0;i >1)]+(i&1); scanf("%d%d%d",&n,&m,&K); for(int i=1;i<=n;i++) { int x; scanf("%d",&x); while(x--) { int y; scanf("%d",&y); a[i]|=1<<(y-1); } } for(int i=1;i<=n;i++) { for(int S=(1< =0;S--) { int s=a[i]|S; if(num[s]>K)continue; f[s]=max(f[s],f[S]+1); } } int ans=0; for(int i=0;i K)continue; ans=max(ans,f[i]); } printf("%d\n",ans);}