Vacation
Problem LinkSolution by dudu — 100 pts
Code / Notes
#include <bits/stdc++.h>
using namespace std;
int N;
vector<vector<int>> A;
vector<vector<int>> memo;
int ganhoAteOFinal(int dia, int ontem) {
// dia N (um dia depois do ultimo)
if (dia > N-1) return 0;
if (memo[dia][ontem] != -1) return memo[dia][ontem];
int ans = 0;
if (ontem != 0) { // << SO SE EU NAO NADEI NO DIA ANTERIOR
// CONSIDERAR A OPÇAO DE NADAR
int opt = A[dia][0] + ganhoAteOFinal(dia+1, 0);
ans = max(ans, opt);
}
if (ontem != 1) {
int opt = A[dia][1] + ganhoAteOFinal(dia+1, 1);
ans = max(ans, opt);
}
if (ontem != 2) {
int opt = A[dia][2] + ganhoAteOFinal(dia+1, 2);
ans = max(ans, opt);
}
memo[dia][ontem] = ans;
return ans;
}
int main() {
cin >> N;
A = vector<vector<int>>(N, vector<int>(3));
for (int i = 0; i < N; i++) {
for (int j = 0; j < 3; j++) {
cin >> A[i][j];
}
}
memo = vector<vector<int>>(N, vector<int>(3, -1));
int ans = 0;
ans = max(ans, ganhoAteOFinal(0, 0));
ans = max(ans, ganhoAteOFinal(0, 1));
ans = max(ans, ganhoAteOFinal(0, 2));
cout << ans << endl;
}
Last updated 1 month, 1 week ago