Ciao a tutti!
Stavo risolvendo preoii_treni (su algobadge) e mi sono ritrovato che nel subtask 5 sforo i limiti di memoria, suppongo a causa della matrice che utilizzo per la memoizzazione.
Il mio codice:
#include<algorithm>
#include<vector>
using namespace std;
//#pragma GCC optimize ("O3")
int trova(const int A[], const int B[], const int &N, const int &i, const int &nTreniPresi, vector<vector<int>> &matMemo){
if(i==N){
return 0;
}
if(matMemo[i][nTreniPresi]==-1){
int a=0, b=0, c=0;
a=trova(A,B,N,i+1,nTreniPresi+1, matMemo)+A[i];
c=trova(A,B,N,i+1,0, matMemo);
if(nTreniPresi==0){
b=trova(A,B,N,i+1,nTreniPresi+1, matMemo)+B[i];
}
matMemo[i][nTreniPresi]=max(max(a,b),c);
}
return matMemo[i][nTreniPresi];
}
int tempo_massimo(int N, int a[], int b[])
{
vector<vector<int>> memo(N, vector<int>(N, -1));
return trova(a, b, N, 0, 0, memo);
}
Qualcuno saprebbe darmi qualche suggerimento per occupare meno memoria? Es. utilizzare una struttura dati diversa, o ridimensionare la matrice attuale ecc.
Ringrazio in anticipo.