Pagini recente » Cod sursa (job #2308727) | Cod sursa (job #1971630) | Cod sursa (job #132065) | Cod sursa (job #2363893) | Cod sursa (job #2899612)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream fin("planeta.in");
ofstream fout("planeta.out");
long long nrMaxBst[31], query, sum;
int i, j, noduri;
vector <int> rez;
void rsd(int st, int dr, int combDreapta)
{
if(st == dr)
{
rez.push_back(st);
return;
}
for (int j = st; j <= dr && sum != query; j++)
{
sum += nrMaxBst[dr-j] * nrMaxBst[j-st] * nrMaxBst[combDreapta];
if (sum >= query)
{
if (sum != query)
sum -=nrMaxBst[dr-j] * nrMaxBst[j-st] * nrMaxBst[combDreapta];
rez.push_back(j);
rsd(st, j-1, dr-j);
rsd(j+1, dr, 0);
}
}
}
int main()
{
//cout << "sunt frumos";
fin >> noduri >> query;
nrMaxBst[0] = 1;
nrMaxBst[1] = 1;
for (i = 2; i <= noduri; i++)
for (j = 0; j < i; j++)
nrMaxBst[i] = 0LL + nrMaxBst[i] + nrMaxBst[j] * nrMaxBst[i-j-1];
--i;
rsd(1, noduri, 0);
for (auto i : rez)
fout << i << ' ';
return 0;
}