#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll infl = 1e18;
void solve() {
int n;
cin >> n;
vector<vector<int>> a(n, vector<int> (n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> a[i][j];
}
}
vector<vector<ll>> dp(n, vector<ll> (n, infl));
for (int i = 0; i < n; i++) {
dp[0][i] = 0;
}
for (int i = 0; i < n - 1; i++) {
int pr = i + 1, bsz = 1;
for (int j = 0; j < 15; j++) {
if (pr & 1) {
bsz = (1 << j);
break;
}
pr >>= 1;
}
for (int j = 0; j < n; j++) {
if (dp[i][j] == infl) continue;
int k = j ^ bsz;
k -= k & (bsz - 1);
for (int l = 0; l < bsz; l++) {
dp[i + 1][k] = min(dp[i + 1][k], dp[i][j] + a[j][k]);
k++;
}
}
}
ll ans = infl;
for (int i = 0; i < n; i++) {
ans = min(ans, dp[n - 1][i]);
}
cout << ans << '\n';
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
//cin >> t;
while (t--) {
solve();
}
}
# | 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... |