浙大A題 我無語了。。。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int dp[1<<16];

int main()

{
int n,m;
int i,j;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(dp,0,sizeof(int)*(1<<n));
int num;
for(i=1;i<=m;i++)
{
scanf("%d",&num);
int t=0;
int k;
for(j=1;j<=num;j++)
{
scanf("%d",&k);
t|=(1<<(k-1));
}
dp[t]=1;
}
int res=0;
int NN=(1<<n)-1;
int x;
for(i=1;i<=NN;i++)
{
x=i;
while(x)
{
x=(x-1)&i;
dp[i]=max(dp[i],dp[x]+dp[(~x)&(i)]);
}
}
for(i=1;i<=NN;i++)
{
if(dp[i]>res)
res=dp[i];
}
printf("%d\n",res);
}
return 0;
}謝謝 我是智障 大牛的提示。
posted on 2010-03-15 14:32 abilitytao 閱讀(219) 評論(0) 編輯 收藏 引用

