#include <iostream>
#include <string.h>
using namespace std;
int map[55][55];
int m,n;
int dp[55][55][55][55];
int digui (int x1,int y1, int x2, int y2){
if(dp[x1][y1][x2][y2]!=-1) return dp[x1][y1][x2][y2];
if(x1==x2 && y1==y2) {
dp[x1][y1][x2][y2] = 0;
return 0;
}
int result = 0;
if(x1>0 && x2>0) {
int temp = digui(x1-1,y1,x2-1,y2)+map[x1][y1]+map[x2][y2];
result = (result < temp ? temp : result);
}
if(x1>0 && y2>0) {
int temp = digui(x1-1,y1,x2,y2-1)+map[x2][y2]+map[x1][y1];
result = (result < temp ? temp : result);
}
if(y1>0 && x2>0) {
int temp = digui(x1,y1-1,x2-1,y2)+map[x2][y2]+map[x1][y1];
result = (result < temp ? temp : result);
}
if(y1>0 && y2>0) {
int temp = digui(x1,y1-1,x2,y2-1)+map[x2][y2]+map[x1][y1];
result = (result < temp ? temp : result);
}
dp[x1][y1][x2][y2] = result;
return result;
}
int main(int argc, const char * argv[])
{
cin >> m >> n;
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++) cin >> map[i][j];
}
memset(dp, -1, sizeof(dp));
dp[0][0][0][0] = 0;
cout << digui(m-2, n-1, m-1, n-2) << endl;
}
wiki 1169 传纸条
最新推荐文章于 2024-04-21 16:14:29 发布