我只在代码里定义了一个short a[1005][1005]数组,评测机却说我全MLE ,1005 * 1005 * 2B=2020050B=1973KB=2MB,远远没有超过125MB!
#include<bits/stdc++.h>
using namespace std;
short a[1005][1005];
int n,m,minn=9999999;
void dfs(int x,int y,int z,int cnt){
if(x==n&&y==m){
minn=min(minn,cnt);
}
if(z!=1&&(x-a[x][y]>0&&(a[x-a[x][y]][y]!=0||x-a[x][y]==n&&y==m)))dfs(x-a[x][y],y,1,cnt+1);
if(z!=2&&(y-a[x][y]>0&&(a[x][y-a[x][y]]!=0||x==n&&y-a[x][y]==m)))dfs(x,y-a[x][y],2,cnt+1);
if(z!=3&&(y+a[x][y]<=m&&(a[x][y+a[x][y]]!=0||x==n&&y+a[x][y]==m)))dfs(x,y+a[x][y],3,cnt+1);
if(z!=4&&(x+a[x][y]<=n&&(a[x+a[x][y]][y]!=0||x+a[x][y]==n&&y==m)))dfs(x+a[x][y],y,4,cnt+1);
if(z!=5&&(x-a[x][y]>0&&y-a[x][y]>0&&(a[x-a[x][y]][y-a[x][y]]!=0||x-a[x][y]==n&&y-a[x][y]==m)))dfs(x-a[x][y],y-a[x][y],5,cnt+1);
if(z!=6&&(x-a[x][y]>0&&y+a[x][y]<=m&&(a[x-a[x][y]][y+a[x][y]]!=0||x-a[x][y]==n&&y+a[x][y]==m)))dfs(x-a[x][y],y+a[x][y],6,cnt+1);
if(z!=7&&(x+a[x][y]<=n&&y-a[x][y]>0&&(a[x+a[x][y]][y-a[x][y]]!=0||x+a[x][y]==n&&y-a[x][y]==m)))dfs(x+a[x][y],y-a[x][y],7,cnt+1);
if(z!=8&&(x+a[x][y]<=n&&y+a[x][y]<=m&&(a[x+a[x][y]][y+a[x][y]]!=0||x+a[x][y]==n&&y+a[x][y]==m)))dfs(x+a[x][y],y+a[x][y],8,cnt+1);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)cin>>a[i][j];
}
dfs(1,1,0,0);
cout<<minn;
return 0;
}