解题代码
#include<bits/stdc++.h>
using namespace std;
int X[9]={0,0,0,-1,-1,-1,-2,-2,-3};
int Y[9]={-3,-2,-1,-2,-1,0,-1,0,0};
int main(){
int n,m;
cin>>n>>m;
int map[n+1][m+1];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>map[i][j];
}
}
int dp[n+1][m+1];
dp[1][1]=map[1][1];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int ans=-999999999;
for(int k=0;k<9;k++){
if(i+X[k]>=1&&j+Y[k]>=1){
ans=max(ans,dp[i+X[k]][j+Y[k]]);
}
}
if(ans != -999999999){
dp[i][j]=map[i][j]+ans;
}
}
}
cout<<dp[n][m];
}