牛客练习赛87.C-牛老板(记忆化搜索&当前最优选择&贪心)

收获&总结

  1. 抓住关键点:每次选择最优解。一击即中。

题目

  1. 传送门
  2. 题意
    在这里插入图片描述
    在这里插入图片描述
  3. 题解
    1. 应该关注的点:每次选择最优的情况,而最优的情况一定在选择最大的 6 i 6^i 6i或者 9 i 9^i 9i中,然后我们记忆化搜索即可。
    2. os:其实好像记忆化搜索也没必要,这题数据很少。(不行,如果不记忆化的化很重复访问很多很多很多很多次)。
  4. 代码
#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;
}

猜你喜欢

转载自blog.csdn.net/I_have_a_world/article/details/119836078