#include <bits/stdc++.h>
using namespace std;
int minStepsToOne(int x) {
vector<int> dp(x + 1, 0); // dp[i] = min steps to reduce i to 1
dp[1] = 0; // base case
for (int i = 2; i <= x; i++) {
int step1 = dp[i - 1];
int step2 = (i >= 2) ? dp[i - 2] : INT_MAX;
int step7 = (i % 7 == 0) ? dp[i / 7] : INT_MAX;
dp[i] = min({step1, step2, step7}) + 1;
}
return dp[x];
}
int main() {
int x;
cout << "Enter a number: ";
cin >> x;
cout << "Minimum number of operations to reduce " << x << " to 1: " << minStepsToOne(x) << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWluU3RlcHNUb09uZShpbnQgeCkgewogICAgdmVjdG9yPGludD4gZHAoeCArIDEsIDApOyAvLyBkcFtpXSA9IG1pbiBzdGVwcyB0byByZWR1Y2UgaSB0byAxCiAgICBkcFsxXSA9IDA7IC8vIGJhc2UgY2FzZQoKICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IHg7IGkrKykgewogICAgICAgIGludCBzdGVwMSA9IGRwW2kgLSAxXTsKICAgICAgICBpbnQgc3RlcDIgPSAoaSA+PSAyKSA/IGRwW2kgLSAyXSA6IElOVF9NQVg7CiAgICAgICAgaW50IHN0ZXA3ID0gKGkgJSA3ID09IDApID8gZHBbaSAvIDddIDogSU5UX01BWDsKCiAgICAgICAgZHBbaV0gPSBtaW4oe3N0ZXAxLCBzdGVwMiwgc3RlcDd9KSArIDE7CiAgICB9CgogICAgcmV0dXJuIGRwW3hdOwp9CgppbnQgbWFpbigpIHsKICAgIGludCB4OwogICAgY291dCA8PCAiRW50ZXIgYSBudW1iZXI6ICI7CiAgICBjaW4gPj4geDsKCiAgICBjb3V0IDw8ICJNaW5pbXVtIG51bWJlciBvZiBvcGVyYXRpb25zIHRvIHJlZHVjZSAiIDw8IHggPDwgIiB0byAxOiAiIDw8IG1pblN0ZXBzVG9PbmUoeCkgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9Cg==