#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
#define N 100005
long long p[2001][2001],q[2001][2001],n,c[2001],ans;
bool vis[2001];
void dfs(long long x,long long tot){
if(x>n){
ans=max(ans,tot);
return ;
}
long long op=0;
for(long long i=x;i<=n;i++)op+=c[i];
if(ans>op+tot)return ;
for(long long i=1;i<=n;i++){
if(!vis[i]){
vis[i]=1;
dfs(x+1,tot+p[x][i]*q[i][x]);
vis[i]=0;
}
}
}
int main(){
cin>>n;
for(long long i=1;i<=n;i++){
for(long long j=1;j<=n;j++)cin>>p[i][j];
}
for(long long i=1;i<=n;i++){
for(long long j=1;j<=n;j++)cin>>q[i][j];
}
for(long long i=1;i<=n;i++){
for(long long j=1;j<=n;j++)c[i]=max(c[i],p[i][j]*q[i][j]);
}
dfs(1,0);
cout<<ans;
}
/*
Input:
3
10 2 3
2 3 4
3 4 5
2 2 2
3 5 3
4 5 1
==================
Output:
52
*/
只错了一个点,求助qwq