Vacation

Problem Link

Solution by dudu100 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


« Back to problem