Submission #1013596

#TimeUsernameProblemLanguageResultExecution timeMemory
1013596amine_arouaNetrpeljivost (COI23_netrpeljivost)C++17
10 / 100
1567 ms600 KiB
#include<bits/stdc++.h> using namespace std; #define intt long long #define pb push_back vector<vector<int>> mat; int n ; const intt INF = 1e18; intt solve(int node ,int fr , int bk ,int l , int r) { if(l + 1 == r) { return mat[fr][bk]; } int m = (l + r)/2; intt ans = INF; if(l <= fr && fr <= m && m + 1 <= bk && bk <= r) { for(int v1 = l ; v1 <= m ;v1++) { if(v1 == fr) continue; for(int v2 = m + 1; v2 <= r ; v2++) { if(v2 == bk) continue; ans = min(ans , solve(2*node , fr , v1 , l , m) + solve(2*node + 1 , v2 , bk , m + 1 , r) + mat[v1][v2]); } } } else if(l <= bk && bk <= m && m + 1 <= fr && fr <= r) { for(int v1 = l ; v1 <= m ; v1++) { if(v1 == bk) continue; for(int v2 = m + 1 ; v2 <= r ; v2++) { if(v2 == fr) continue; ans = min(ans , solve(2*node , v1 , bk , l , m) + solve(2*node + 1 , fr , v2 , m + 1 , r) + mat[v1][v2]); } } } return ans; } int main() { cin>>n; mat = vector<vector<int>> (n , vector<int>(n)); for(int i = 0 ; i < n ; i++) { for(int j = 0 ; j < n ; j++) { cin>>mat[i][j]; } } if(n == 1) { cout<<0<<'\n'; return 0; } intt ans = LLONG_MAX; int l = 0 , r = n - 1; int m = (l + r)/2; for(int fr = l ; fr <= m ; fr++) { for(int bk = m + 1 ; bk <= r ; bk++) { ans = min({ans , solve(1 , fr , bk , l , r) , solve(1 , bk , fr , l , r)}); } } cout<<ans<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...