真的是很水的题啊。。。。
实在是浪费时间。。。
本来看见是金组的题还以为有点水平就做了。。就当是考完试找手感吧
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,a[20],f[20];
bool check()
{
int b[20];
for(int i=1;i<=n;i++)
b[i]=a[i];
for(int i=n-1;i>=1;i--)
for(int j=1;j<=i;j++)
b[j]+=b[j+1];
if(b[1]==m)
{
for(int i=1;i<=n-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[n]);
return 1;
}
return 0;
}
void dfs(int x)
{
if(x==n+1)
{
if(check())
exit(0);
return;
}
for(int i=1;i<=n;i++)
if(!f[i])
{
f[i]=1;
a[x]=i;
dfs(x+1);
f[i]=0;
a[x]=0;
}
return;
}
int main()
{
scanf("%d%d",&n,&m);
memset(a,0,sizeof(a));
memset(f,0,sizeof(f));
dfs(1);
return 0;
}