Buonasera,
purtroppo non riesco a passare un test case del secondo subtask di Dog Trick
Questo è il codice che ho scritto:
int score_ric(const vector<int> &t, int i, bool can_skip) {
if (i >= t.size()) return 0;
// Check if the result is already in the memo
if (memo[can_skip * n + i] != 0) {
return memo[can_skip * n + i];
}
const pair<int, int> trick = make_pair(t[i], t[i + 1]);
const pair<int, int> trick2 = make_pair(t[i], t[i + 2]);
int can_perform_first_trick = (i + 1 >= t.size() && t[i] != (k + 1)) || tricks.find(trick) != tricks.end() ? 1 : 0;
int can_perform_second_trick = (i + 2 >= t.size() && t[i] != (k + 1)) || tricks.find(trick2) != tricks.end() ? 1 : 0;
int best_score = 0;
if (can_perform_first_trick == 0 && can_perform_second_trick == 0) {
if (can_skip) {
best_score = score_ric(t, i + 1, false);
memo[can_skip * n + i] = max(best_score, memo[can_skip * n + i]);
return best_score;
} else {
return 0;
}
}
if (can_perform_first_trick == 1) {
if (can_skip) {
best_score = max(1 + score_ric(t, i + 1, true), score_ric(t, i + 1, false));
} else {
best_score = 1 + score_ric(t, i + 1, true);
}
}
if (can_perform_second_trick == 1) {
if (can_skip) {
best_score = max(max(1 + score_ric(t, i + 2, true), score_ric(t, i + 2, false)), best_score);
} else {
best_score = max(1 + score_ric(t, i + 2, true), best_score);
}
}
// Save the result in memo before returning
memo[can_skip * n + i] = max(best_score, memo[can_skip * n + i]);
return best_score;
}
dove memo è un vettore di interi