~~打破0回复惨案~~
by Ryo_Yamada @ 2020-02-24 19:26:26
实践是检验真理的唯一标准
by zhangboju @ 2020-02-24 19:28:23
@[breeze末影](/user/242543) 实践出真知!
by gdjcwsk @ 2020-02-24 19:33:20
(这道题我过了
by Magia @ 2020-02-24 19:39:18
@[紫曦蒟蒻](/user/200060) 谁都知道
by Ryo_Yamada @ 2020-02-24 19:39:29
嗯……好吧差别有点大
by Ryo_Yamada @ 2020-02-24 19:41:07
此 贴 终 结
by Ryo_Yamada @ 2020-02-24 19:41:27
```
#include <cstdio>
using namespace std;
int n,sum;
int visited[25]= {0};
int ans[25];
int pc[25];
int dfs(int i,int num,int v);
int main(void) {
scanf("%d%d",&n,&sum);
pc[0]=pc[n-1]=1;
if (n>1)
for (int i=1; i*2<n; i++)
pc[i]=pc[n-1-i]=(n-i)*pc[i-1]/i;
if (dfs(0,0,0))
for (int i=1; i<=n; i++)
printf("%d ",ans[i]);
return 0;
}
int dfs(int i,int num,int v) {
if (v>sum)
return 0;
if (i==n) {
if (v==sum) {
ans[i]=num;
return 1;
} else
return 0;
}
visited[num]=1;
for (int j=1; j<=n; j++) {
if (!visited[j] && dfs(i+1,j,v+pc[i]*j)) {
ans[i]=num;
return 1;
}
}
visited[num]=0;
return 0;
}
```
by lichangzhou_123 @ 2020-02-25 16:20:17
参考
by lichangzhou_123 @ 2020-02-25 16:20:27