Il mio programma è in grado di risolvere tutti i problemi che gli vengono posti (tranne il primo esempio per qualche ragione) e più della metà dei problemi del sub task 5, dove sfora con il tempo (timed out).
Vorrei sapere se nel mio programma è possibile modificare qualcosa per ottimizzare i tempi abbastanza da permettere al mio programma di risolverlo o se ho proprio sbagliato algoritmo.
#include <algorithm>
using namespace std;
int quadri(int N, long long M, int V[]) {
int B = N;
for(int i=0; i<N-1; i++) { //Controlla se esiste un quadro oltre il massimo, e ritorna subito 0 evitando di calcolare tutto
if(!(V[i] < M)) return 0;
}
for(int i=0; i<N-1; i++) { //Per ogni quadro
long long int sum=0;
int newB=0;
for(int j=i; j<N and sum<M; j++) { //Vedi i successivi finchè non esci
sum+=V[j];
if(sum<M) newB++;
} //J
B = min(B, newB);
if(newB == N-i) {if(B != N) B++; break; } //Se arriva alla fine senza problemi, ha trovato il nuovo risultato
} //I
return B;
}
Ho cercato di mettere più commenti possibile in modo da semplificare la revisione.
Ringrazio in anticipo per l’aiuto.