← Back to List

1821번: 수들의 합 6 ↗

Solutions

C++14
987 B | 987 chars
#include <bits/stdc++.h>

using namespace std;
typedef unsigned long long ull;
typedef long long ll;
typedef vector <ll> llv1;
typedef unsigned int uint;
typedef vector <ull> ullv1;
typedef vector <vector <ull>> ullv2;

llv1 ar;
ll N,K;
int D[22][22];

int f(int x, int y) {
    if(D[x][y]) return D[x][y];
    if(x < y || x< 0 || y < 0) {
        return D[x][y] = 0;
    }
    if(x == y || y == 0) {
        return D[x][y] = 1;
    }
    if(y == 1) {
        return D[x][y] = x;
    }
    return D[x][y] = f(x-1,y-1) + f(x-1, y);
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    cin >> N >> K;
    for(int x=1; x<=N; x++) {
        ar.push_back(x);
    }

    do {
        ll S = 0;
        for(int x=0; x<N; x++) {
            S += f(N-1,x) * ar[x];
        }
        if(S == K) {
            for(auto i : ar) {
                cout << i << " ";
            }
            break;
        }
    }
    while(next_permutation(ar.begin(), ar.end()));
}