Submission #1277187

#TimeUsernameProblemLanguageResultExecution timeMemory
1277187dostsNetrpeljivost (COI23_netrpeljivost)C++20
59 / 100
1598 ms65840 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2") #define int long long #define pii pair<int,int> #define vi vector<int> #define ff first #define ss second #define sp << " " << #define all(x) x.begin(),x.end() #define big(x) ((int)(x.size())) using namespace std; const int MOD = 1e9+7, LIM = 1e6+1, inf = 2e18; const int N = (1LL<<11); int f[N][N]; int cost[N][N]; void solve() { int n; cin >> n; for (int i = 0;i<n;i++) { for (int j = 0;j<n;j++) { cin >> cost[i][j]; } } for (int i = 0;i<n;i++) { for (int j = 0;j<n;j++) f[i][j]= inf; } for (int le = n-1;le>=0;le--) { for (int ri = le;ri < n;ri++) { int len = ri-le+1; if ((1<<__lg(len)) != len) continue; if (le%len != 0) continue; if (len == 1) { f[le][ri] = 0; continue; } if (len == 2) { f[le][le+1] = f[le+1][le] = cost[le][le+1]; continue; } int mid = (le+ri) >> 1; for (int r = ri;r >= mid+1;r--) { for (int a = le;a <= mid;a++) { int mn = inf; for (int b = mid+1;b<=ri;b++) { int chunk = (1<<__lg((b^r))+1); if (chunk <= len/4 || b == r) { continue; } mn = min(mn,cost[a][b]+f[b][r]); } for (int l = le;l<=mid;l++) { int chunk = (1<<__lg(a^l)+1); if (chunk <= len/4 || a == l) { continue; } f[l][r] = min(f[l][r],f[l][a]+mn); } } } for (int l = le;l<=mid;l++) { for (int r = mid+1;r<=ri;r++) { f[r][l] = f[l][r]; } } } } int mn = inf; for (int i = 0;i<n/2;i++) { for (int j = n/2;j<n;j++) mn = min(mn,f[i][j]); } cout << mn << '\n'; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); #ifdef Dodi freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif int t = 1; //cin >> t; while (t --> 0) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...