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;
    }
  • 相关阅读:
    Spring Cloud-Eureka的一些概念
    Spring Cloud-Eureka的基本架构
    Spring Cloud-分布式事务
    Spring Cloud-熔断机制
    SpringBoot下载文件
    redis 指定db库导入导出数据
    python基础:重新认识装饰器
    源码解析:django的CSRF认证
    源码解析:数据批量导入bukl_crete()原理
    剑指 Offer 13. 机器人的运动范围
  • 原文地址:https://www.cnblogs.com/linliu/p/5432375.html
Copyright © 2011-2022 走看看