You are on page 1of 1

#include <bits/stdc++.

h>
using namespace std;

vector<int>
// void
dp(int n) {
int len = n < 3 ? 4 : n+1;
vector<int> dp(len);
dp[1] = 0;
dp[2] = 1;
dp[3] = 1;
for (int v = 4; v <= n; v++) {
if (v%3 == 0) {
dp[v] = dp[v/3]+1;
} else {
int d1 = v%2 == 0 ? dp[v/2] : INT_MAX;
int d2 = dp[v-1];
dp[v] = min(d1, d2) + 1;
}
}
// cout << dp[n] << endl;
int curr = n;
vector<int> solution;
while (curr > 0) {
solution.push_back(curr);
if (curr%3 == 0) {
curr /= 3;
} else {
int c1 = curr%2 == 0 ? dp[curr/2] : INT_MAX;
int c2 = dp[curr-1];
if (c1 <= c2) {
curr /= 2;
} else {
curr--;
}
}
}
reverse(solution.begin(), solution.end());
return solution;
}

int main() {
int n;
std::cin >> n;
// dp(n);
vector<int> sequence = dp(n);
std::cout << sequence.size() - 1 << std::endl;
for (size_t i = 0; i < sequence.size(); ++i) {
std::cout << sequence[i] << " ";
}
}

You might also like