收获&总结
- 抓住关键点:每次选择最优解。一击即中。
题目
- 传送门
- 题意:


- 题解:
- 应该关注的点:每次选择最优的情况,而最优的情况一定在选择最大的 6 i 6^i 6i或者 9 i 9^i 9i中,然后我们记忆化搜索即可。
- os:其实好像记忆化搜索也没必要,这题数据很少。(不行,如果不记忆化的化很重复访问很多很多很多很多次)。
- 代码:
#include <bits/stdc++.h>
#define int long long
#define dbg(x) cout << #x << "===" << x << endl
using namespace std;
int n;
map<int, int> mp;
int solve(int n) {
if (n < 6) return n;
if (mp[n]) return mp[n];
int i = 1, j = 1;
while (i * 6 <= n) i *= 6;
while (j * 9 <= n) j *= 9;
return mp[n] = min(solve(n - i), solve(n - j)) + 1;
}
signed main() {
int T;
cin >> T;
while (T--) {
cin >> n;
cout << solve(n) << endl;
}
return 0;
}