CCCPaste

Untitled

int n, x, y, z;
   int dp[10055];
int rec(int at) {
    if(at == 0) {
        return 0;
    }
    if(dp[at] != -1) {
        return dp[at];
    }
    int res = -2e7;
    if(at - x >= 0) {
        res = max(res, rec(at - x) + 1);
    }
    if(at - y >= 0) {
        res = max(res, rec(at - y) + 1);
    }
    if(at - z >= 0) {
        res = max(res, rec(at - z) + 1);
    }
    return dp[at] = res;
}
int maximizeTheCuts(int n, int x, int y, int z)
    {
        this->n = n;
        this->x = x;
        this->y = y;
        this->z = z;
        memset(dp, -1, sizeof dp);
        return rec(n) > 0 ? rec(n) : 0;
    }