直接暴力~
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,m,num[2][11],ans[11];
bool use[11],isok;
bool Cal()
{
int cnt=n,pos=0;
for(int i=0;i<n;i++)
ans[i]=num[0][i];
while(cnt>1)
{
for(int i=0;i<cnt-1;i++)
{
num[pos^1][i]=num[pos][i]+num[pos][i+1];
}
cnt--;
pos^=1;
}
if(num[pos][0]==m)
{
isok=true;
return true;
}
for(int i=0;i<n;i++)
num[0][i]=ans[i];
return false;
}
void DFS(int deep)
{
if(deep==n)
{
if(Cal())
{
for(int i=0;i<n;i++)
printf("%d ",ans[i]);
printf("\n");
}
return;
}
for(int i=1;i<=n;i++)
if(!use[i])
{
use[i]=1;
num[0][deep]=i;
DFS(deep+1);
if(isok)
return;
use[i]=0;
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
isok=false;
memset(use,0,sizeof(use));
DFS(0);
}
return 0;
}