#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n;
vector<vector<int>> a;
vector<vector<int>> dist;
vector<pair<int,int>> dir={{0,1},{0,-1},{1,0},{-1,0}};
const int inf=10e8;
int main()
{
    cin>>n;
    a.resize(n,vector<int>(n));
    dist.resize(n,vector<int>(n,-1));
    queue<pair<int,int>> q;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>a[i][j];
            if(a[i][j]==0){
                q.push({i,j});
                dist[i][j]=0;
            }
        }
    }
    vector<vector<int>> t(n,vector<int>(n));
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>t[i][j];
        }
    }
    while(!q.empty()){
        auto[x,y]=q.front();q.pop();
        for(int i=0;i<4;i++){
            int nx=x+dir[i].first;
            int ny=y+dir[i].second;
            if(nx>=0 && nx<n && ny>=0 && ny<n && a[nx][ny]==1 && dist[nx][ny]==-1){
                dist[nx][ny]=dist[x][y]+1;
                q.push({nx,ny});
            }
        }
    }
    vector<vector<int>> dp(n,vector<int>(n,inf));
    vector<vector<int>> tim(n,vector<int>(n,inf));
    tim[0][0]=0;
    dp[0][0]=a[0][0]==1?t[0][0]:0;
    for(int i=1;i<n;i++){
        tim[i][0]=min(tim[i][0],tim[i-1][0]+1);
        int cost=tim[i][0]>dist[i][0]?t[i][0]:0;
        dp[i][0]=dp[i-1][0]+cost;
    }
    for(int j=1;j<n;j++){
        tim[0][j]=min(tim[0][j],tim[0][j-1]+1);
        int cost=tim[0][j]>dist[0][j]?t[0][j]:0;
        dp[0][j]=dp[0][j-1]+cost;
    }
    for(int i=1;i<n;i++){
        for(int j=1;j<n;j++){
            dp[i][j]=dp[i-1][j-1];
            tim[i][j]=min(tim[i][j],tim[i-1][j-1]+1);
            if(i>0){
                tim[i][j]=min(tim[i][j],tim[i-1][j]+1);
                int cost=tim[i][j]>dist[i][j]?t[i][j]:0;
                dp[i][j]=min(dp[i][j],dp[i-1][j]+cost);
            }
            if(j>0){
                tim[i][j]=min(tim[i][j],tim[i][j-1]+1);
                int cost=tim[i][j]>dist[i][j]?t[i][j]:0;
                dp[i][j]=min(dp[i][j],dp[i][j-1]+cost);
            }
        }
    }
    cout<<dp[n-1][n-1];
}