zoukankan      html  css  js  c++  java
  • delightful world--计蒜客(DFS)

    http://nanti.jisuanke.com/t/11067

    题目大意: 给你一个n和m  下面是m个字符串和k   每一字符串的长度是n  你要找一个串跟每一个串匹配  有k个字符是和这个串相等   让你求有多少个正确的串

    他说  k最大是5   所以就直接枚举第一个串的正确的位置  然后跟其他的比较   枚举最大的也就是C(35,5)  32万多  

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<ctype.h>
    #include<math.h>
    #include<queue>
    #include<algorithm>
    #include<iostream>
    
    using namespace std;
    #define N 50
    const double ESP = 1e-8;
    #define INF 0xffffffff
    #define memset(a,b) memset(a,b,sizeof(a))
    
    int n,m;
    char maps[N][N];
    int c[N],a[N];
    char ch[N];
    int ans=0;
    
    int judge()
    {
        for(int i=1; i<=m; i++)
        {
            int t=0;
            for(int j=1; j<=n; j++)
            {
                if(maps[i][j]==ch[j])
                    t++;
            }
            if(t!=a[i])
                return false;
        }
        return true;
    }
    
    int ok()
    {
        for(int i=1; i<=n; i++)
        {
            if(c[i]==1)
                ch[i]=maps[1][i];
            else if(maps[1][i]=='1')
                ch[i]='0';
            else
                ch[i]='1';
        }
        if(judge())
            return true;
        return false;
    }
    
    void DFS(int nn,int k)
    {
        if(nn<k)
            return;
        if(k==0)
        {
            if(ok())
                ans++;
            return;
        }
        c[nn]=0;
        DFS(nn-1,k);
        c[nn]=1;
        DFS(nn-1,k-1);
        c[nn]=0;
    
    }
    
    int main()
    {
        memset(a,0);
        memset(c,0);
        memset(maps,0);
        memset(ch,0);
        while(scanf("%d %d",&n,&m)!=EOF)
        {
            memset(a,0);
            memset(c,0);
            memset(maps,0);
            memset(ch,0);
            for(int i=1; i<=m; i++)
            {
                scanf("%s %d",maps[i]+1,&a[i]);
            }
            ans=0;
            DFS(n,a[1]);
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    2016年3月iOS面试总结
    iOS常用公共方法
    让你的App说出多国语言——iOS开发之本地化(国际化)
    开发中遇到的坑
    Git简明教程
    iOS-打包成ipa的4种方法
    iOS-最全的App上架教程
    android 开源项目
    android 文件缓存工具类
    android 聊天通讯源码
  • 原文地址:https://www.cnblogs.com/linliu/p/5432375.html
Copyright © 2011-2022 走看看