30分代码怎么回事?
大佬求助(AC代码如下)
#include <bits/stdc++.h>
using namespace std;
int n, sum, a[15], c[15][15], vis[15];
void dfs(int step, int cnt) {
if (cnt > sum) return;
if (step > n) {
if (cnt == sum) {
for (int i = 1; i <= n; i++) cout << a[i] << " ";
exit(0);
}
return;
}
for (int i = 1; i <= n; i++) {
if (vis[i] == 0) {
vis[i] = 1;
a[step] = i;
dfs(step + 1, cnt + i * c[n][step]);
vis[step] = 0;
}
}
}
signed main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> sum;
c[1][1] = 1;
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= i; j++) {
c[i][j] = c[i - 1][j] + c[i - 1][j - 1];
}
}
dfs(1, 0);
return 0;
}