#include<cstdio>
#include<cstring>
using namespace std;
int s[100],d[1<<17];
long long dp[1<<17];
char str[100];
int main()
{
int T,n,t=1;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=0;i<=n;i++)
{
s[i]=0;
scanf("%s",str);
for(int j=0;j<strlen(str);j++)
{
if(str[j]=='1')
s[i]|=(1<<j);
}
}
int len=(1<<n)-1;
d[0]=s[0];
for(int i=1;i<=len;i++)
{
d[i]=s[0];
for(int j=0;j<n;j++)
if((i>>j)&1)
d[i]|=s[j+1];
}
memset(dp,0,sizeof(dp));
dp[0]=1;
for(int i=1;i<=len;i++)
{
for(int j=0;j<n;j++)
{
if((d[i^(1<<j)]>>j)&1)
dp[i]+=dp[i^(1<<j)];
}
}
printf("Case %d: %lld\n",t++,dp[len]);
}
}
uva 11795 Mega Man‘s Missions’ 状态压缩DP
最新推荐文章于 2019-03-04 17:03:27 发布