Aiuto per Maximum Sum Path (ois_maxpath)

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!

Sicuramente devi stare attento al fatto che tra i vari constraints c’è:

• −1e9 ≤ Aij ≤ 1e9 for each i = 0 . . . N − 1 and j = 0 . . . M − 1

e stai cercando come soluzione un maxpath!