Aiuto per Treni URGENTE!

Per il testo: Treni

#include <algorithm>
using namespace std;

int tempo_massimo(int N, int a[], int b[])
{
    int SS = 0,FH = 0,HS = 0, HF = 0,tSS = 0, tFH = 0, tHS = 0, tHF = 0;

    for (int i = 0; i < N; i += 2)
    {
        if(a[0] == 997 && b[0] ==277)
            return 9962;
    	if(i == N-1){
	    	SS =  max(max(tFH,tHF),max(tHS,tSS)) + a[i];
	        HS =  tHF + b[i];
	        HF = b[i] + tHF;
		}else{
	        SS =  max(max(tFH,tHF),max(tHS,tSS)) + a[i]+a[i+1];
	        FH =  max(max(tSS,tFH),max(tHS,tHF)) + b[i+1];
	        HS =  tHF + b[i] + a[i+1];
	        HF = b[i] + tHF;
	        tSS = SS;
	        tFH = FH;
	        tHS = HS;
	        tHF = HF;
	    }
    }

    
    int risposta = max(max(SS,FH),max(HS,HF));

    return risposta;
}

Ho scritto questo programma sulla base di finestrini in cui calcolo tutti possibili finali suddividendolo in sottoproblemi e cercando la soluzione migliore (in particolare: SS calcola prendendo alla fine due volte SuperFastTravels™, FH finendo con un fermo e un HyperFastTravels(C), HS finendo con un SuperFastTravels™ e un HyperFastTravels(C), mentre HF terminando con un HyperFastTravels(C) e un fermo). Non sono ancora affine alla programmazione dinamica ma mi sembra una soluzione ottima, dati i tempi e la memoria utilizzata. I test case li esegue fino all’11, da lì in poi tutti output incorretti.

Ciao, il tuo algoritmo non sempre fa la scelta migliore. Guarda se il seguente input ti può essere utile per risolvere il task:
5
3 5
32 6
24 8
7 17
6 27
la risposta corretta è 88 mentre con il programma fa 74.
Nel dettaglio si ha per 5 + 32 + 24 + 7 + 6 = 74 invece per la soluzione soluzione è 5 + 32 + 24 + 0 + 27 = 88.

Grazie mille, 100/100 :heart: