神秘DP求调:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
signed main () {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
int arr[n+5][m+5],brr[n+m+5],dp[n+5][m+5],jl[n+5][m+5];
memset(jl,0,sizeof(jl));
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
cin>>arr[i][j];
}
}
for(int i=1;i<=n+m-1;i++) {
cin>>brr[i];
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
int tmp1=jl[i-1][j]+brr[i+j-1]-arr[i][j];
int tmp2=jl[i][j-1]+brr[i+j-1]-arr[i][j];
int tmp3=max(dp[i-1][j],tmp1);
int tmp4=max(dp[i][j-1],tmp2);
if(i==1&&j==1) {
dp[i][j]=brr[i+j-1]-arr[i][j];
jl[i][j]=brr[i+j-1]-arr[i][j];
}else if(i==1) {
dp[i][j]=tmp4;
jl[i][j]=tmp2;
}else if(j==1) {
dp[i][j]=tmp3;
jl[i][j]=tmp1;
}else if(tmp3<tmp4) {
dp[i][j]=tmp3;
jl[i][j]=tmp1;
}else if(tmp3>tmp4) {
dp[i][j]=tmp4;
jl[i][j]=tmp2;
}else if(tmp1<tmp2) {
dp[i][j]=tmp3;
jl[i][j]=tmp1;
}else {
dp[i][j]=tmp4;
jl[i][j]=tmp2;
}
}
}
cout<<max(dp[n][m],0ll);
return 0;
}
//不MLX