#include <bits/stdc++.h>
using namespace std;
const int N=6e5+1;
#define ll long long
vector<vector<ll>> divide(int n,vector<vector<ll>> g){
if(n==1){
ll o=1e18;
return {{o,o},{o,0}};
}
vector<vector<ll>> f(n+1,vector<ll>(n+1,1e18));
vector<vector<ll>> g1(n/2+1,vector<ll>(n/2+1));
vector<vector<ll>> g2(n/2+1,vector<ll>(n/2+1));
for(int i=1;i<=n/2;++i){
for(int j=1;j<=n/2;++j){
g1[i][j]=g[i][j];
}
}
for(int i=n/2+1;i<=n;++i){
for(int j=n/2+1;j<=n;++j){
g2[i-n/2][j-n/2]=g[i][j];
}
}
vector<vector<ll>> r=divide(n/2,g1);
vector<vector<ll>> d=divide(n/2,g2);
for(int i=1;i<=n/2;++i){
for(int j=1;j<=n/2;++j){
for(int k=1;k<=n/2;++k){
for(int p=1;p<=n/2;++p){
f[i][p+n/2]=min(f[i][p+n/2],r[i][j]+d[k][p]+g[j][k+n/2]);
f[p+n/2][i]=min(f[p+n/2][i],r[i][j]+d[k][p]+g[j][k+n/2]);
}
}
}
}
return f;
}
int main() {
ios_base::sync_with_stdio(NULL);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin>>n;
vector<vector<ll>> g(n+1,vector<ll> (n+1));
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
cin>>g[i][j];
}
}
vector<vector<ll>> p=divide(n,g);
ll mn=1e18;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
mn=min(mn,p[i][j]);
}
}
cout<<mn<<'\n';
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |