https://www.luogu.com.cn/record/163071619
#include<bits/stdc++.h>
using namespace std;
int m,n,a[100][100],sum;
bool vis[100][100];
void f2(int x,int y,int s)
{
if(x==1&&y==1)
{
sum=max(sum,s);
return;
}
if(x>m||y>n||x<1||y<1||vis[x][y]==true)
return;
s+=a[x][y];
vis[x][y]=true;
f2(x-1,y,s);
f2(x,y-1,s);
vis[x][y]=false;
}
void f1(int x,int y,int s)
{
if(x==m&&y==n)
{
f2(m,n,s);
return;
}
if(x>m||y>n||x<1||y<1||vis[x][y]==true)
return;
s+=a[x][y];
vis[x][y]=true;
f1(x+1,y,s);
f1(x,y+1,s);
vis[x][y]=false;
}
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
f1(1,1,0);
cout<<sum;
return 0;
}