#include using namespace std; #include #include #include #include #include #define N 51 struct node{ int x,y; node(int a,int b) { x=a; y=b; } node(){}; }; int key[4][2]={0,1,0,-1,1,0,-1,0}; int n,map[N][N],d[N][N]; long long f[N][N]; void find() { int i; node s; queue Q; memset(d,1,sizeof(d)); d[n][n]=map[n][n]; Q.push(node(n,n)); while (!Q.empty()) { s=Q.front(); Q.pop(); for (i=0;i<4;++i) { int x,y; x=s.x+key[i][0]; y=s.y+key[i][1]; if (x>0&&x<=n && y>0&&y<=n) { if (d[x][y]>d[s.x][s.y]+map[x][y]) { d[x][y]=d[s.x][s.y]+map[x][y]; Q.push(node(x,y)); } } } } } long long dp(int x,int y) { if (f[x][y]!=-1) return f[x][y]; int i; long long t=0; for (i=0;i<4;++i) { int x1,y1; x1=x+key[i][0]; y1=y+key[i][1]; if (x1>0&&x1<=n && y1>0&&y1<=n) if (d[x1][y1]