Problema con sottoposizione "treni"

Salve a tutti!!
Sto provando a risolvere la sottoposizione dei treni, ma con il seguente codice mi risolve solo i Subtask 1, 2 e del Subtask 3 mi da corretti solo 4 output su 5.

int tempo_massimo(int n, int a[], int b[]){

    int tempo;
    bool treno_preso = true;

    if(a[0]+a[1] >= b[0]+a[1])
        tempo = a[0];

    else if(b[0]+a[1] > b[1])
        tempo = b[0];

    else
        treno_preso = false;


    for(int i = 1; i < n; i++){

        if(i+1 < n){

            if(!treno_preso){
                tempo += b[i];
                treno_preso = true;
            }

            else if(a[i]+a[i+1] >= b[i+1]){
                tempo += a[i];
                treno_preso = true;
            }

            else
                treno_preso = false;
        }

        else if(!treno_preso && b[i] > a[i])
            tempo += b[i];

        else
            tempo += a[i];
    }

    return tempo;
}

Spero riuscirete a darmi qualche consiglio!!

Potresti spiegare cosa fa il tuo algoritmo?

Il tuo è un algoritmo greedy, quindi fa scelte migliori locali, ma non è detto (come vedi dal fatto che non dà output corretti) che siano quelle le migliori da eseguire. In questo caso dovresti affidarti alla programmazione dinamica

Però leggere il post già fatto è difficile?