Solitario2 TLE test case 48

buongiorno, volevo chiedere un consiglio per ottimizzare il codice dato che 1 test case mi va in tle. questo è il codice.

#include <iostream>
#include <vector>
#pragma GCC optimize ("Ofast")
using namespace std;

int rows,cols;
int ans=0;
int area;

inline bool controlla(vector<vector<int>>&m,int i,int j){
    if(m[i][j])
        return false;
    if(i>=2){
        if(m[i-1][j]&&m[i-2][j])
            return false;
        if(j>=2){
            if(m[i-1][j-1]&&m[i-2][j-2])
                return false;
        }
        if(j<=cols-3){
            if(m[i-2][j+2]&&m[i-1][j+1])
                return false;
        }
    }
    if(i<=rows-3){
        if(m[i+1][j]&&m[i+2][j])
            return false;
        if(j>=2){
            if(m[i+1][j-1]&&m[i+2][j-2])
                return false;
        }
        if(j<=cols-3){
            if(m[i+1][j+1]&&m[i+2][j+2])
                return false;
        }
    }
    if(j>=2){
        if(m[i][j-1]&&m[i][j-2])
            return false;
    }
    if(j<=cols-3){
        if(m[i][j+1]&&m[i][j+2])
            return false;
    }
    if(j>0 && j<cols-1){
        if(m[i][j-1]&&m[i][j+1])
            return false;
    }
    if(i>0 && i<rows-1){
        if(m[i-1][j]&&m[i+1][j])
            return false;
    }
    if(j>0 && i>0 && j<cols-1 && i<rows-1){
        if(m[i-1][j-1]&&m[i+1][j+1])
            return false;
        if(m[i-1][j+1]&&m[i+1][j-1])
            return false;
    }

    return true;
}


void solve(vector<vector<int>>&m,int count,int i,int j){
    if(j>=cols){
        i++;
        j=0;
    }
    if(i==rows){
        if(count>ans)
            ans=count;
        return;
    }
    if((area-((i)*cols+j)+count)<ans)
		return;	
    if(controlla(m,i,j)){
        m[i][j]=1;
        solve(m,count+1,i,j+1);
        m[i][j]=0;
    }
    solve(m,count,i,j+1);
}

int main(){
ios::sync_with_stdio(false);
cin.tie(0);
    cin>>rows>>cols;
vector<vector<int>>m(rows,vector<int>(cols));
    area=rows*cols;
    for(int i=0;i<rows;i++)
        for(int j=0;j<cols;j++)
            cin>>m[i][j];

    solve(m,0,0,0);

    cout<<ans;

    return 0;
}

grazie

Ciao, una griglia dove il programma va in TLE è, ad esempio, G[10x4] = 0.
Per rientrare nei tempi ti basta aggiungrere nelle condizioni anche ‘=’ ans.

grazie mille