蒟蒻求助dalao,为什么点2会MLE?
#include<bits/stdc++.h>
using namespace std;
int m,n,ans,maxx,ans1;
char a[1002][1002];
bool hl;
void dfs(int j,int i){
if(j>n||j<1||i>m||i<1||hl==1)return;
if(ans*4>m*n){
hl=1;
return;
}
if(a[j][i]=='D'){
if(a[j-1][i]=='I')dfs(j-1,i);
if(a[j+1][i]=='I')dfs(j+1,i);
if(a[j][i-1]=='I')dfs(j,i-1);
if(a[j][i+1]=='I')dfs(j,i+1);
}
else if(a[j][i]=='I'){
if(a[j-1][i]=='M')dfs(j-1,i);
if(a[j+1][i]=='M')dfs(j+1,i);
if(a[j][i-1]=='M')dfs(j,i-1);
if(a[j][i+1]=='M')dfs(j,i+1);
}
else if(a[j][i]=='M'){
if(a[j-1][i]=='A')dfs(j-1,i);
if(a[j+1][i]=='A')dfs(j+1,i);
if(a[j][i-1]=='A')dfs(j,i-1);
if(a[j][i+1]=='A')dfs(j,i+1);
}
else if(a[j][i]=='A'){
ans1++;
if(a[j-1][i]=='D')dfs(j-1,i);
if(a[j+1][i]=='D')dfs(j+1,i);
if(a[j][i-1]=='D')dfs(j,i-1);
if(a[j][i+1]=='D')dfs(j,i+1);
}
if(a[j][i]=='A'){
ans=max(ans,ans1);
ans1--;
}
}
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++)for(int j=1;j<=n;j++)cin>>a[j][i];
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(a[j][i]=='D'){
dfs(j,i);
if(hl==1){
cout<<"Poor Inna!";
return 0;
}
hl=0;
maxx=max(maxx,ans);
ans=0;
ans1=0;
}
}
}
if(maxx==0)cout<<"Poor Dima!";
else cout<<maxx;
return 0;
}