代码
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1002][1002],fx[3][2]={{-1,0},{1,0},{0,1}},mi=INT_MIN,c[1002][1002],xx[3];
bool b[1002][1002];
int dfs(int x,int y,int sum){
if(x==n&&y==m){
mi=max(mi,sum);
}
if(c[x][y]!=0){
return c[x][y];
}
int zz=INT_MIN;
for(int i=0;i<3;i++){
int nx,ny;
nx=x+fx[i][0];
ny=y+fx[i][1];
if(nx>=1&&ny>=1&&nx<=n&&ny<=m&&b[nx][ny]==true){
b[nx][ny]=false;
xx[i]=dfs(nx,ny,sum+a[nx][ny]);
b[nx][ny]=true;
}
}
c[x][y]=max(max(xx[0],xx[1]),xx[2]);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
memset(b,true,sizeof(b));
b[1][1]=false;
dfs(1,1,a[1][1]);
cout<<mi;
return 0;
}
这个记忆化搜索那错了??