Campo da calcio (5/16)

Ciao, sto cercando di risolvere questo esercizio sulla piattaforma Terry. Per rendere il codice più veloce creo una matrice di somme e poi vado a calcolare i vari casi (per non fare quattro cicli annidati). Cosa devo fare per prendere il massimo?

#include <iostream>
#include <vector>

using namespace std;

void solve (int t) 
{
    int N, M, K, A, B;
    cin >> N >> M >> K >> A >> B;

	int alberi[N][M]={}, sum[N][M]={};
					
    vector<int> sol;
    for (int i = 0; i < K; i++) 
	{
		int I, J;
        cin >> I >> J;
        alberi[I][J]++;
    }
	
	for (int i=0; i<N; i++)
	{
		for (int j=0; j<M; j++)
		{
			sum[i][j]=alberi[i][j];
			if (i>0)
				sum[i][j]=sum[i][j]+sum[i-1][j];
			if (j>0)
				sum[i][j]=sum[i][j]+sum[i][j-1];
			if (i>0&&j>0)
				sum[i][j]=sum[i][j]-sum[i-1][j-1];
		}
	}    

	for (int I=A-1; I<N; I++)
	{
		for (int J=B-1; J<M; J++)
		{
			int s=sum[I][J];
			if (I>A-1)
				s=s-sum[I-A][J];
			if (J>B-1)
				s=s-sum[I][J-B];
			if (I>A-1&&J>B-1)
				s=s+sum[I-A][J-B];
			sol.push_back(s);
		}
	}
	
	int min=sol[0];
	for (int i=1; i<sol.size(); i++)
	{
		if (sol[i]<min)
			min=sol[i];
	}

    cout << "Case #" << t << ": " << min << "\n";
}

int main() 
{
	freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);

    int T;
    cin >> T;

    for (int t = 1; t <= T; t++) 
	{
        solve(t);
    }

    return 0;
}

Qui stai dichiarando dei variable-length array, il cui comportamento può essere un po’ strano. In particolare clang si rifiuta di compilare (dicendo che non puoi inizializzare dei variable length array), mentre gcc compila senza problemi. Anche se gcc li compila, sono proprio loro a causare problemi, visto che sostituendoli con dei vector di vector il codice funziona senza problemi.
In generale sconsiglio fortemente di usare questa sintassi non standard, preferendo ad essa o i vettori della STL o gli array di dimensione costante (dichiarati della grandezza massima per funzionare sempre)

Grazie mille!