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.