记录编号 |
314547 |
评测结果 |
AAAAAAAAAA |
题目名称 |
染色 |
最终得分 |
100 |
用户昵称 |
沉迷学习的假的Keller |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.926 s |
提交时间 |
2016-10-03 18:00:08 |
内存使用 |
2.49 MiB |
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#define lint long long
using namespace std;
const int maxn=20;
const int INF=0x3f3f3f;
char a[maxn][maxn];
lint ans,now;
int alone[1<<maxn];
int f[1<<maxn];
int n;
inline void init(){
for(int i=1;i<(1<<n);i++){
f[i]=INF;
for(int j=0;j<n;j++){
if(i&(1<<j)){
for(int k=0;k<n;k++){
if(i&(1<<k)&&a[j+1][k+1]=='1'){
alone[i]=1;
break;
}
}
}
if(alone[i]) break;
}
}
return ;
}
int Main(){
freopen("ezcolor.in","r",stdin);
freopen("ezcolor.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",a[i]+1);
}
init();
f[0]=0;
for(int i=1;i<(1<<n);i++){
for(int j=i;j;j=i&(j-1)){
if(!alone[j])
f[i]=min(f[i],f[i^j]+1);
}
}
now=1;
for(int i=1;i<(1<<n);i++){
now*=233;
ans+=f[i]*now;
}
printf("%u",(int)ans);
//while(1);
return 0;
}
int main(){;}
int helenkeller=Main();