zoukankan      html  css  js  c++  java
  • 题解 CF32A 【Reconnaissance】

    一看到了求方案数,马上想到了枚举 (dfs)

    深搜思路:(dfs(t)) ((t)为选了几个人)

    • 1 如果已经选取了两个数,(ans)++并(return)

    • 2 枚举(1sim n) 如果第(a_{i})个人没被选过且与前一个人身高差的绝对值不超过(d),则标记为已选并(dfs(t+1))

    Code

    #include<bits/stdc++.h>
    using namespace std;
    int n,d,a[1010],ans,s[1010];//s用来存前一个人的身高
    bool p[1010];//p用来标记已选过的人
    void dfs(int t)
    {
        if(t>2)
        {
            ans++;
            return;
        }
        for(int i=1; i<=n; i++)
        {
            s[0]=a[i];//s[0]需要设成a[i],这样第一个人才能选
            if(abs(a[i]-s[t-1])<=d&&!p[i])
            {
                p[i]=1;
                s[t]=a[i];//记录前一个人的身高
                dfs(t+1);
                p[i]=0;//回溯
            }
        }
    }
    int main()
    {
        scanf("%d%d",&n,&d);
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&a[i]);
        }
        dfs(1);
        printf("%d",ans);
        return 0;
    }
    
    
  • 相关阅读:
    SpringMVC截图版
    MySQL
    Mybatis-Spring
    Spring
    get
    log
    SpringBoot
    Mybatis和spingboot整合
    学习笔记-英语
    PartialView+$.reload()局部刷新
  • 原文地址:https://www.cnblogs.com/WKAHPM/p/11628907.html
Copyright © 2011-2022 走看看