• 【noip模拟赛4】Matrix67的派对 暴力dfs


    【noip模拟赛4】Matrix67的派对
     

    描述

     

    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的正整数

    输出

     

    输出符合要求的安排总数

    输入样例 1 

    4 10
    2
    16
    6
    10

    输出样例 1

    2

    做法:
    用dfs试每一条路,记录一个步数step,当step==n,切该点和起点差距小于k时,答案就累计一个。
    开3个数组:
    1 pre 记录 step-1 时,是哪个点,用来与step时的各个数比较判断能否做一起。
    2 flag 在试没一条路时,用flag标记每一条路,防止死循环,这条路探完后,重置为0。
    3 high 记录每个人的高。

    注意:有特解 当n=1时,ans 应为1。
    #include<iostream>
    #include<cmath>
    #include<stdio.h>
    #include<vector>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    const int maxn=11;
    int high[maxn],pre[maxn];
    int n,k,ans;
    bool flag[maxn];
    
    void dfs(int step)
    {
    
          for(int i=2;i<=n;i++)
          {
                if(!flag[i]&&abs(high[i]-high[pre[step-1]])<=k)
                {
                      flag[i]=1;
                      pre[step]=i;
                      if(step==n&&abs(high[pre[step]]-high[1])<=k)
                      {
                            ans++;
                      }
                      else
                            dfs(step+1);
                      flag[i]=0;
                }
          }
    }
    
    int main(void)
    {
        //  freopen("input.txt","r",stdin);
          cin>>n>>k;
          for(int i=1;i<=n;i++)
          {
                cin>>high[i];
          }
          if(n==1)
                ans=1;
          else
          {
                ans=0;
                flag[1]=1;
                pre[1]=1;
                dfs(2);
          }
          cout<<ans<<endl;
          return 0;
    }
  • 相关阅读:
    找到排序矩阵中从小到大第K个数字
    使用VSCODE开发UE4
    UE4添加模块
    游戏串流
    DIY Arduino 方向盘
    免费/开源软件推荐
    把引擎插件变成工程插件
    MergeActors技巧
    烘焙卡在99%
    UMG里没有"Prefab"怎么办?
  • 原文地址:https://www.cnblogs.com/zgncbsylm/p/10579988.html
Copyright © 2020-2023  润新知