简单题:
#include <stdio.h>
#include <string.h>
int N, Sum;
int x[15];
bool visit[15];
bool check()
{
int i, k = N;
int y[15], z[15];
for (i = 1; i <= k; i++)
{
z[i] = y[i] = x[i];
}
while (k > 1)
{
for (i = 1; i < k; i++)
{
z[i] = y[i + 1] + y[i];
}
k--;
for (i = 1; i <= k; i++)
{
y[i] = z[i];
}
}
return (z[1] == Sum) ? true : false;
}
bool dfs(int p)
{
int j;
if (p > N)
{
return false;
}
if (p == N && check())
{
return true;
}
for (j = 1; j <= N; j++)
{
if (j <= N && !visit[j])
{
x[p + 1] = j;
visit[j] = true;
if (dfs(p + 1))
{
return true;
}
x[p + 1] = 0;
visit[j] = false;
}
}
return false;
}
int main()
{
freopen("bdsum.4.in", "r", stdin);
while (scanf("%d%d", &N, &Sum) != EOF)
{
memset(x, 0, sizeof(x));
memset(visit, false, sizeof(visit));
if (dfs(0))
{
for (int j = 1; j <= N; j++)
{
printf("%d ", x[j]);
}
printf("/n");
}
}
return 0;
}