@[winds888](/user/664744)
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,m,i,j,ans=-99999999;
int mp[205][205],f[205][205];
int dx[]={-1,-1,-1};
int dy[]={-1,0,1};
int dfs(int x,int y){
// printf("%d %d\n",x,y);
if(x<1 || x>n || y<1 || y>m) return 0;
if(f[x][y]!=-99999999) return f[x][y];
int p,q=-99999999;
for(int i=0;i<=2;i++){
int nx=x+dx[i],ny=y+dy[i];
p=dfs(nx,ny)+mp[nx][ny];
q=max(q,p);
}
return f[x][y]=q;
}
signed main(){
for(i=1;i<=200;i++){
for(j=1;j<=200;j++) f[i][j]=-99999999;
}
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++) scanf("%d",&mp[i][j]);
}
ans=max(ans,dfs(n,m/2)+mp[n][m/2]);
// memset(f,-1,sizeof(f));
ans=max(ans,dfs(n,m/2+2)+mp[n][m/2+2]);
// memset(f,-1,sizeof(f));
ans=max(ans,dfs(n,m/2+1)+mp[n][m/2+1]);
printf("%d",ans);
return 0;
}
```
改成这样就AC了
by z_y_ @ 2022-11-29 19:19:08
@[z_y_](/user/556472) 能证明一下正确性吗,谢谢
by Nwayy @ 2022-11-29 19:49:00
@[winds888](/user/664744) m为奇数,所以大餐桌的一侧的中点下边就是 $(n,m/2+1)$,而不是 $(n,m/2)$ 。
by z_y_ @ 2022-11-29 20:08:13
@[z_y_](/user/556472) 原来是这里错了,谢谢大佬。
by Nwayy @ 2022-11-29 21:37:13