#include <stdio.h>

#define MAX 1000

int minMovesToWin(int n);
int minMovesToWinSlow(int n);
int min(int a, int b);

int main() {

    // Store the first 11 answers.
    int res[MAX];
    res[0] = 0;
    int i;
    for (i=1; i<=10; i++) res[i] = 1;

    // Build the rest.
    for (i=11; i<1000; i++)
        res[i] = 1 + min(res[i-10], res[i/3]);

    // Check if this worked.
    for (i=0; i<1000; i++)
        if (res[i] != minMovesToWin(i))
            printf("Does not work for %d\n", i);

    return 0;
}

// My fast greedy function.
int minMovesToWin(int n) {
    if (n == 0) return 0;
    if (n <= 10) return 1;
    return 1 + minMovesToWin(n/3);
}

// My slow brute force function that tries both options.
int minMovesToWinSlow(int n) {
    if (n == 0) return 0;
    if (n <= 10) return 1;
    int div3 = minMovesToWinSlow(n/3) + 1;
    int sub10 = minMovesToWinSlow(n-10) + 1;
    return min(div3, sub10);
}

int min(int a, int b) {
    return a < b ? a : b;
}
