hdu3006 状态压缩~方案数

来源:互联网 发布:电视盒山寨机刷机软件 编辑:程序博客网 时间:2024/05/20 02:22

很简单的题目,将集合压缩成一个数,两重循环搞定。


ACcode:

#include<cstdio>#include<cstring>const int NS=15;int n,m,k,t;int v[1<<NS],a[111];int main(){    while (~scanf("%d%d",&n,&m))    {        for (int i=0;i<n;i++)        {            scanf("%d",&k);            a[i]=0;            for (int j=0;j<k;j++)            scanf("%d",&t),a[i]|=(1<<(t-1));        }        memset(v,0,sizeof(v));        v[0]=1;        int ans=-1,lim=1<<m;        for (int i=0;i<lim;i++)        {            for (int j=0;j<n;j++)            v[i|a[j]]|=v[i];            ans+=v[i];        }        printf("%d\n",ans);    }    return 0;}


原创粉丝点击