Ciao a tutti, ho bisogno di aiuto per risolvere il problema Maximum Sum Path.
Non riesco a passare i test case dove cambiano i colori.
La mia logica è di fare un maxsumpath per ogni colore e poi trovare il massimo, ho usato un for e un lambda chiamato get_maxpath_onecolor() che aggiorna K in ogni loop.
Però riesco solo a fare 5 puntggi, quindi voleo cheidere dove ho sbagliato.
Ecco il mio codice:
// NOTE: it is recommended to use this even if you don't understand the following code.
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <climits>
using namespace std;
using ll = long long;
int main() {
// uncomment the two following lines if you want to read/write from files
// ifstream cin("input.txt");
// ofstream cout("output.txt");
int N,M;
cin >> N >> M;
vector<vector<int>> A(N, vector<int>(M));
for (int j = 0; j < N; ++j) {
for (int i = 0; i < M; ++i)
cin >> A[j][i];
}
vector<vector<int>> C(N, vector<int>(M));
for (int j = 0; j < N; ++j) {
for (int i = 0; i < M; ++i){
cin >> C[j][i];
}
}
ll K = 0;
auto get_maxpath_onecolor = [&](int act_color){
bool opened_grid[N][M];
ll summ_path[N][M];
for (int i=0; i<N; i++){
for (int j=0; j<M; j++){
//set dello stato attuale;
if (C[i][j] == act_color) opened_grid[i][j] = true;
else if (i-1 >= 0 && opened_grid[i-1][j]) opened_grid[i][j] = true;
else if (j-1 >= 0 && opened_grid[i][j-1]) opened_grid[i][j] = true;
else opened_grid[i][j] = false;
//codice di change
if (opened_grid[i][j]){
summ_path[i][j] = 1LL * A[i][j];
if (i-1 >= 0 && opened_grid[i-1][j])
summ_path[i][j] = max(summ_path[i][j], 1LL * A[i][j] + summ_path[i-1][j]);
if (j-1 >= 0 && opened_grid[i][j-1])
summ_path[i][j] = max(summ_path[i][j], 1LL * A[i][j] + summ_path[i][j-1]);
if (C[i][j] == act_color) K = max(K, summ_path[i][j]);
}
}
}
};
for (int color = 1; color <= 500; color ++) get_maxpath_onecolor(color);
cout<<K<<endl;
return 0;
}
Grazie mille in anticipo!