Problem:
Score : 300 points

Problem Statement

To make it difficult to withdraw money, a certain bank allows its customers to withdraw only one of the following amounts in one operation:

1 yen (the currency of Japan)

6 yen, 6^2(=36) yen, 6^3(=216) yen, ...

9 yen, 9^2(=81) yen, 9^3(=729) yen, ...

At least how many operations are required to withdraw exactly N yen in total?

It is not allowed to re-deposit the money you withdrew.

Constraints

1 \leq N \leq 100000

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

If at least x operations are required to withdraw exactly N yen in total, print x.

Sample Input 1

127

Sample Output 1

4

By withdrawing 1 yen, 9 yen, 36(=6^2) yen and 81(=9^2) yen, we can withdraw 127 yen in four operations.

Sample Input 2

3

Sample Output 2

3

By withdrawing 1 yen three times, we can withdraw 3 yen in three operations.

Sample Input 3

44852

Sample Output 3

16

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <cctype>
#include <functional>
#include <map>
#include <cmath>

using namespace std;
typedef long long ll;

#define reps(i,s,n) for(int (i) = (s); (i) < (n); (i)++)
#define rep(i,n) reps(i,0,n)

int main(){
    const int INF = 1e9;
    int n;
    int i=6,j=9;
    vector<int> unit;
    unit.push_back(1);
    cin >> n;

    while(i < n){
        unit.push_back(i);
        i *= 6;
    }

    while(j < n){
        unit.push_back(j);
        j *= 9;
    }
    
    sort(unit.begin(),unit.end());

    int dp[100001];
    rep(i,n+1){
        dp[i] = INF;
    }

    dp[1] = 1;
    reps(i,2,n+1){
        for(auto elem : unit){
            if(i - elem >= 0){
                dp[i] = min(dp[i] ,dp[i-elem]+1);
            }
        }
    }
    cout << dp[n] << endl;

    return 0;

}