```cpp#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
bool vis[1005][1005];
int a[1005][1005];
int n,m;
long long maxn=-9e18;
void dfs(long long sum,int x,int y)
{
if(x==n&&y==m)
{
maxn = max(maxn,sum);
return ;
}
if(x>n||y>m||x<1||y<1)
return ;
if(!vis[x+1][y])
{
vis[x+1][y]=1;
dfs(sum+a[x+1][y],x+1,y);
vis[x+1][y]=0;
}
if(!vis[x][y+1])
{
vis[x][y+1]=1;
dfs(sum+a[x][y+1],x,y+1);
vis[x][y+1]=0;
}
if(!vis[x-1][y])
{
vis[x-1][y]=1;
dfs(sum+a[x-1][y],x-1,y);
vis[x-1][y]=0;
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
vis[1][1]=1;
dfs(a[1][1],1,1);
cout<<maxn;
return 0;
}
```
这是我的dfs代码,求改成记忆化 或提供思路
by PorkSausage @ 2023-09-24 19:40:30
<https://www.luogu.com.cn/problem/solution/P7074>
by jiangtaizhe001 @ 2023-09-24 19:54:19