Wordsearch 70/100

Salve a tutti, sto provando a risolvere questo problema ma ottengo 70/100 a causa di un signal 9 negli ultimi 3 tescase

#include <bits/stdc++.h>
#define MOD 1000000007

using namespace std;

ifstream fin("input.txt");
ofstream fout("output.txt");

int n, m;
char v[105][105];
long long int memo[105][105][1005];
string s;

int dp(int a, int b, int pos){
 if(pos==s.length()-1){
 	return 1;
 }
 if(memo[a][b][pos]!=-1) return memo[a][b][pos]%MOD;
 long long int j=0;
 for(int x=-1; x<=1; x++){
 	for(int y=-1; y<=1; y++){
 		if(x==0 && y==0) continue;
 		if(v[a+x][b+y]==s[pos+1]){
 			j+=dp(a+x, b+y, pos+1)%MOD;
 		}
 	}
 }
 return memo[a][b][pos]=j%MOD;
}

int main(){
 fin >> s;
 fin >> n >> m;
 for(int x=0; x<=n+2; x++){
     for(int y=0; y<=m+2; y++){
         for(int z=0; z<=s.length()+2; z++){
             memo[x][y][z]=-1;
         }
     }
 }
 for(int x=0; x<=n+1; x++){
 	v[0][x]='#';
 	v[n+1][x]='#';
 }
 for(int x=0; x<=m+1; x++){
 	v[x][0]='#';
 	v[x][m+1]='#';
 }
 for(int x=1; x<=n; x++){
 	for(int y=1; y<=m; y++){
 		fin >> v[x][y];
 	}
 }
 long long int i=0;
 for(int x=1; x<=n; x++){
 	for(int y=1; y<=m; y++){
 		if(v[x][y]==s[0]){
 			i+=dp(x, y, 0)%MOD;
 		}
 	}
 }
 fout << i%MOD;
}

il problema è che va fuori memoria solo con la parte in cui inizializzo i valori della memo con -1, ho provato ad usare il comando memset ma la cosa non cambia.
Grazie in anticipo.

Utilizza gli int per la memoizzazione ilong long intpesano troppo, nella matrice salvi solo valori inferiori al modulo quindi non ci sono problemi.

Fabio.

3 Mi Piace

grazie mille risolto, non pensavo ci fosse così tanta differenza