记录编号 314547 评测结果 AAAAAAAAAA
题目名称 染色 最终得分 100
用户昵称 Gravatar沉迷学习的假的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();