您的位置:首页 > 其它

位运算——pku2436患病的奶牛

2011-09-05 21:09 232 查看
患病的奶牛N只,D种病毒,最多包含K种病毒,求包含最多有几头牛

6 3 2
0
1 1
1 2
1 3
2 2 1
2 2 1

看到D的范围比较小<=15,用011,表示患了第2,3钟病毒的奶牛a[i]

在枚举K种病毒,如110  (用STL里的排列函数枚举)m

如m|a[i]==m,说明a[i]包括在m里,add++

记录最大值

View Code

#include<algorithm>
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;

int a[1009];
bool b[19];

int main()
{
int n,d,k;
while(scanf("%d%d%d",&n,&d,&k)!=EOF)
{
int i,t,j,temp;
for(i=0;i<n;i++)
{
scanf("%d",&t);

a[i]=0;
for(j=0;j<t;j++)
{
scanf("%d",&temp);
a[i]+=1<<(temp-1);
}
}
memset(b,0,sizeof(b));

for(i=0;i<k;i++)
{
b[d-1-i]=1;
}

int max=0;
do
{
int add=0;
int all=0;
for(i=0;i<d;i++)
{
if(b[i])
all+=1<<i;
}

for(i=0;i<n;i++)
{
if((all|a[i])==all)
add++;
}

if(add>max)
max=add;
}while(next_permutation(&b[0],&b[d]));

printf("%d\n",max);
}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: