洛谷P1118 [USACO06FEB]数字三角形`Backward Digit Su`…
#include<iostream> using namespace std ; const int N=1010; int y[N][N]; int n; int a[N]; bool st[N]; int sum; bool flag; void print() { for(int i=1; i<=n; i++) cout<<a[i]<<" "; } void dfs(int step,int ans) { if(ans>sum||flag) return ; if(step==n+1&&ans==sum) { print(); flag=1; return ; } for(int i=1; i<=n; i++) { if(!st[i]) { st[i]=1; a[step]=i; dfs(step+1,ans+i*y[n][step]); st[i]=0; } } } int main() { cin>>n>>sum; y[1][1]=1; for(int i=2; i<=n; i++)//杨辉三角 for(int j=1; j<=i; j++) y[i][j]=y[i-1][j-1]+y[i-1][j]; dfs(1,0); return 0; }