http://www.luogu.org/problem/show?pid=1118
每个数用的次数构成杨辉三角,用的次数i*排列i的所有和等于sum就行
STL只能80分,估计DFS全排序能AC
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#define ms(i,j) memset(i,j, sizeof i);
using namespace std;
int c[20][20];
int a[20];
int main()
{
int n,sum;
scanf("%d%d", &n ,&sum);
for (int i=1;i<=n;i++)
{
c[i][1] = 1;
for (int j=2;j<=i;j++)
c[i][j] = c[i-1][j-1]+c[i-1][j];
}
for (int i=1;i<=n;i++) a[i] = i;
do
{
int tmp = 0;
for (int i=1;i<=n;i++) tmp += a[i] * c[n][i];
if (tmp==sum)
{
for (int i=1;i<=n;i++) printf("%d ", a[i]);
return 0;
}
}while(next_permutation(a+1,a+n+1));
return 0;
}