大致看了一下题解,记忆化可以过的,但是我这个怎么只要 25 分 qwq
#include<bits/stdc++.h>
using namespace std;
int n,m,ans=-999999999,arr[1005][1005],vis[1005][1005],vis2[1005][1005],ma[1005][1005];
void dfs(int x,int y,int sum){
if(x==n&&y==m){
ans=max(ans,sum);
return;
}
if(vis2[x][y]&&sum<=ma[x][y])return;
vis[x][y]=1;
ma[x][y]=sum;
if(x>1&&!vis[x-1][y]){
dfs(x-1,y,sum+arr[x-1][y]);
}
if(x<n&&!vis[x+1][y]){
dfs(x+1,y,sum+arr[x+1][y]);
}
if(y<m&&!vis[x][y+1]){
dfs(x,y+1,sum+arr[x][y+1]);
}
vis[x][y]=0;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)cin>>arr[i][j];
for(int i=1;i<=1001;i++)
for(int j=1;j<=1001;j++)ma[i][j]=-999999999;
dfs(1,1,arr[1][1]);
cout<<ans;
return 0;
}
听说这道题要用 dp,但是本蒟蒻看不懂 dp 啊 qwq,教教我吧……