(题名:P7074 [CSP-J2020] 方格取数)
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e4,N=1e7;
int n,m,w[maxn][maxn];
long long ans,sum=-1e18;
int r[N][3];
int fx[4]={0,0,1,-1};
int fy[4]={0,1,0,0};
bool pd[maxn][maxn];
void print(int k){
ans=0;
for(int i=1;i<k;i++){
ans+=w[r[i][1]][r[i][2]];
}
ans+=w[n][m];
sum=max(ans,sum);
}
void fun(int x,int y,int k){
r[k][1]=x;
r[k][2]=y;
pd[x][y]=1;
if(x==n&&y==m){
print(k);
}
int tx,ty;
for(int i=1;i<=4;i++){
tx=x+fx[i];
ty=y+fy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&pd[tx][ty]!=1){
fun(tx,ty,k+1);
pd[tx][ty]=0;
}
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>w[i][j];
}
}
fun(1,1,1);
cout<<sum;
return 0;
}