这题怎么记忆化 悬关

P7074 [CSP-J2020] 方格取数

```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


|