记录编号 39309 评测结果 AAAAAAAAAA
题目名称 项链制作 最终得分 100
用户昵称 GravatarIMSL77 是否通过 通过
代码语言 C++ 运行时间 0.717 s
提交时间 2012-07-08 18:03:31 内存使用 1.19 MiB
显示代码纯文本
#include <iostream>
#include <fstream>
using namespace std;
#define LL long long
int main(){
  const int N=16;
  const LL MOD=1000000007;
  int n,w[N][N];
  LL f[1<<N],g[1<<N];
  freopen("necklacemn.in","r",stdin);
  freopen("necklacemn.out","w",stdout);
  cin>>n;
  for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
      cin>>w[i][j];
  g[0]=1;
  for(int j=1;j<1<<n;j++)
    {
      int i,k;
      for(i=0;!(j&(1<<i));i++);
      g[j]=g[j-(1<<i)];
      for(k=0;k<n;k++)
	if((k!=i)&&(j&(1<<k)))g[j]=(g[j]*(w[i][k]+1))%MOD;
    }
  f[0]=1;
  for(int j=1;j<1<<n;j++)
    {
      int i;
      for(i=0;!(j&(1<<i));i++);
      int l=j-(1<<i);
      for(int k=l&(l-1);;k=(--k)&l)
	{
	  f[j]=(f[j]+f[k+(1<<i)]*g[j-k-(1<<i)])%MOD;
	  if(!k)break;
	}
      f[j]=(g[j]-f[j]+MOD)%MOD;
    }
  cout<<f[(1<<n)-1];
  fclose(stdin); fclose(stdout);
  return 0;
}