zoukankan      html  css  js  c++  java
  • 【搜索】数学组の问题

        There are three girls and fifteen boys who are having a meeting at a round rable.You need to put them at proper place to make sure that "there are least four boys between every two girls".You have to print the answer that how many different ways can you find.And the ways themself.Attention:the ways that can be rotate to the same is the same.

     1 #include<cstdio>
     2 #include<cstring>
     3 using namespace std;
     4 int ans,p,en; bool a[19];
     5 bool save[10001][19];
     6 bool check()
     7 {
     8     for(int i=1;i<=18;i++)
     9       if(a[i])
    10         {
    11           for(int j=i-1;j>=i-4;j--) if(a[j]) return 0;
    12           for(int j=18;j>=14+i;j--) if(a[j]) return 0;
    13           for(int j=i+1;j<=i+4;j++) if(a[j]) return 0;
    14           for(int j=1;j<=i-14;j++) if(a[j]) return 0;
    15         } return 1;
    16 }
    17 bool panchong()
    18 {
    19     for(int i=1;i<=en;i++)
    20       {
    21           for(int j=1;j<=18;j++)//枚举起点 
    22             {
    23                 int l=1;
    24                 for(int k=j;k<=18;k++,l++) if(a[k]!=save[i][l]) goto OUT;
    25                 for(int k=1;k<j;k++,l++) if(a[k]!=save[i][l]) goto OUT;
    26                 return 0;
    27             OUT:;
    28             }
    29       }
    30     return 1;
    31 }
    32 void dfs(int man,int woman)
    33 {
    34     if(man<0||woman<0) return;
    35     if(man==0&&woman==0)
    36       {
    37           if(check()&&panchong())
    38           {
    39               ans++;
    40               memcpy(save[++en],a,sizeof(a));
    41           }
    42           return;
    43       }
    44     a[++p]=1;
    45     dfs(man,woman-1);//1:nv
    46     a[p]=0;
    47     dfs(man-1,woman);//0:nan
    48     p--;
    49 }
    50 int main()
    51 {
    52     dfs(15,3);
    53     for(int i=1;i<=en;i++)
    54       {
    55           for(int j=1;j<=18;j++) printf("%d ",save[i][j]);
    56           puts("");
    57       }
    58     printf("%d
    ",ans);
    59     return 0;
    60 }
  • 相关阅读:
    svg
    vuex的模块
    es6的新增方法和es5数组的一些方法
    vue的响应规则
    简单的解构赋值
    vuex的四种状态
    indexDB
    token验证
    C# 委托与事件的DEMO
    WPF MVVM 键盘按键事件绑定
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/4097249.html
Copyright © 2011-2022 走看看