mathe 发表于 2018-4-26 11:38:14

计算机搜索有很多结果
0 1 4 11 29;0 2 8 17 22
0 1 4 11 29;0 2 21 26 35
0 1 13 31 38;0 2 8 17 22
0 1 13 31 38;0 2 21 26 35
0 1 15 19 25;0 2 5 13 34
0 1 15 19 25;0 2 9 30 38
0 1 15 19 25;0 3 11 32 39
0 1 17 23 27;0 2 5 13 34
0 1 17 23 27;0 2 9 30 38
0 1 17 23 27;0 3 11 32 39
0 2 8 17 22;0 3 10 28 40
0 2 21 26 35;0 3 10 28 40
我们可以以
0 1 4 11 29;0 2 8 17 22
为例子
上面对应两个模式,每个模式中每个数都可以加上0~40中任意一个数并且模41可以形成共82种模式。
这82个模式中,0~40每个数都正好在10个模式中出现。
于是我们把82个模式看成82个人,0~40看成41次会议,那么82个人可以召开41次会议,每次会议正好10个人,而没有两个人参加相同的会议

mathe 发表于 2018-4-26 11:58:14

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXV 41
#define TSIZE 91390

#define INVALID 0xFFFFFFFFFFFFFFFFLL
unsigned data;
signed long long result;
int dc;
signed long long alldiff(unsigned int x)
{
    signed long long r=0ll;
    int i,j;
    for(i=0;i<5;i++)for(j=i+1;j<5;j++){
      long long l1 = 1ll<<(x-x);
      if(r&l1)return INVALID;
      r|=l1;
      l1 = 1ll<<(MAXV-(x-x));
      if(r&l1)return INVALID;
      r|=l1;
    }
    return r;
}

void init()
{
    unsigned int i;
    i=0;
    for(i=i+1;i<MAXV;i++){
       for(i=2*i+1;i<MAXV;i++){
         for(i=i+i+1;i<MAXV;i++){
               for(i=i+i+1;i<MAXV;i++){
                  signed long long r = alldiff(i);
                  data=((i<<24)|(i<<16)|(i<<8)|(i<<0));
                  result=r;
                  dc++;
               }
         }
       }
    }
}

void output(unsigned x, unsigned y)
{
    printf("0 %d %d %d %d;", x>>24, (x>>16)&255, (x>>8)&255, x&255);
    printf("0 %d %d %d %d\n",y>>24, (y>>16)&255, (y>>8)&255, y&255);
}

int main()
{
    int i,j;
    init();
    printf("dc=%d\n",dc);
    for(i=0;i<dc;i++){
      if(result==INVALID)continue;
      for(j=i+1;j<dc;j++){
      if((result&result) == 0ll){
            output(data,data);
      }
      }
    }
}

王守恩 发表于 2018-4-26 12:15:48

本帖最后由 王守恩 于 2018-4-26 12:17 编辑

mathe 发表于 2018-4-26 11:38
计算机搜索有很多结果
0 1 4 11 29;0 2 8 17 22
0 1 4 11 29;0 2 21 26 35


我还是厚着脸皮问:A(82,18,10)=41应该有的,但 ,有A(8, ? ,3)=8吗?

补充内容 (2018-4-27 08:46):

谢谢mathe!谢谢宝贵的资料! A(82,18,10)=41是有的,A(8, ? ,3)=8也是有的。节点没有问题,前面有个路灯,心里踏实多了。

Sirius 发表于 2018-4-27 10:45:30

谢谢math老师,构造很巧妙。
页: 1 [2]
查看完整版本: 一个组合问题