栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 1346 Comparing Your Heroes

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 1346 Comparing Your Heroes

#include <stdio.h>#include <string.h>#define N 20#define M 100001#define clr(a) memset(a,0,sizeof(a))int n;int hash[M];int a[N][N];int dp[M];int error;int ELFhash(char *key){     unsigned long h=0;     while(*key){         h=(h << 4) + *key++;         unsigned long g=h & 0xf0000000L;         if (g) h^= g >> 24;         h &= ~g;     }     return h % M;}int ID(char s[]){    int h = ELFhash(s);    if(!hash[h]) hash[h]=++n;    return hash[h];}int Enpre(int e[]){    int i,c=0;    for(i=1;i<=n;i++){        if(e[i]) c|=1<<(i-1);    }    return c;}int Count(int e[]){    int c=Enpre(e);    if(dp[c]) return dp[c];    if(error) return 0;    int i,j,num=0;    int z[N],pre,m=0;    for(i=1;i<=n;i++){        if(e[i]){ num++; pre=0; for(j=1;j<=n;j++)     if(e[j]&&a[j][i]) pre++; if(!pre) z[m++]=i;        }    }    if(!m){         error=1;        return 0;    }    if(num==1){         dp[c]=1;        return dp[c];    }    int sum=0;    for(i=0;i< m;i++){         e[z[i]]=0;        sum+=Count(e);        e[z[i]]=1;        if(error) return 0;    }    dp[c]=sum;    return dp[c];}int main(){    int m;    while(scanf("%d",&m)!=EOF){        n=0;        clr(hash);        clr(a);        clr(dp);        int i,j,k;        char s[N],t[N];        for(k=0;k< m;k++){ scanf("%s%s",s,t); i=ID(s); j=ID(t); a[i][j]=1;        }        int e[N];        for(i=1;i<=n;i++) e[i]=1;        error=0;        Count(e);        k=Enpre(e);        if(error) printf("0n");        else printf("%dn",dp[k]);    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378061.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号