洛谷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;
}

猜你喜欢

转载自www.cnblogs.com/QingyuYYYYY/p/11914947.html