身高安排方法(基础dfs)

 P1085

时间限制: 0 Sec  内存限制: 128 MB
提交: 64  解决: 44
[提交][状态][讨论版][命题人:外部导入]

题目描述

Matrix67发现身高接近的人似乎更合得来。Matrix67举办的派对共有N(1< =N< =10)个人参加,Matrix67需要把他们安排在圆桌上。Matrix67的安排原则是,圆桌上任意两个相邻人的身高之差不能超过K。请告诉Matrix67他共有多少种安排方法。

输入

        第一行输入两个用空格隔开的数N和K,其中1< =N< =10,1< =K< =1  000  000。         第二行到第N+1行每行输入一个人的身高值。所有人的身高都是不超过1  000  000的正整数

输出

        输出符合要求的安排总数

样例输入

4 10
2
16
6
10

样例输出

2

提示

#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
int n;
int k;
int h[15];
int v[15];
int a[15];
int ans=0;
void dfs(int step){
    for(int i=2;i<=n;i++){
        if(!v[i]&&abs(h[i]-a[step-1])<=k)
        {
            v[i]++;
            a[step]=h[i];
            if(step == n && abs(a[step] - a[1]) <= k)
            {
                    ans++;
            }
                else
                dfs(step+1);
                v[i] --;
            }
        }
    return;
}
 
 
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>h[i];
        v[i]=0;
    }
    if(n==1)
        cout<<1;
    else{
        v[1]++;
        a[1]=h[1];
        dfs(2);
        cout<<ans;
    }
         
 
    return 0;
}

 

 

posted on 2019-03-01 13:34  蔡军帅  阅读(590)  评论(0编辑  收藏  举报