Problema treni pre-OII

Buonasera a tutti,
stavo provando a risolvere il problema “treni” delle pre-OII, ma il mio programma risolve correttamente solo i subtasks 1 e 2. Questo è il codice che ho usato:

int tempo_massimo(int N, int a[], int b[]){
    int day;
    long long sec = 0;
    int trenipresi[1000000];
    for(day = 0; day < N; day++){
		if(a[day] < b[day]){
			//std::cout << trenipresi[day-1] << "\n";
			if(trenipresi[day-1] != 1 && trenipresi[day-1] != 2){
				trenipresi[day] = 2;
				if(b[day+2] > a[day+1] && day+2 != N){
					trenipresi[day+1] = 0;
					day++;
				}
			} else if(day+1 == N){ // ULTIMO GIORNO?
				trenipresi[day] = 1;
			} else {
				trenipresi[day] = 1;
				if(b[day+2] > a[day+1] && day+2 != N){
					trenipresi[day+1] = 0;
					day++;
				}
			}
		} else {
			trenipresi[day] = 1;
		}
	}
	
	for(day = 0; day < N; day++){
		if(trenipresi[day] == 1) sec += a[day];
		if(trenipresi[day] == 2) sec += b[day];
	}
	return sec;
}

Avete qualche consiglio? Non riesco proprio a correggere i bug senza avere gli input per il quale il programma sbaglia l’output :neutral_face: (per questo mi piaceva di più il sistema di gara delle territoriali)

PS: potreste darmi un aiutino per il problema “flow”? non riesco a capire da dove iniziare

Grazie!

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