Submission #98445

#TimeUsernameProblemLanguageResultExecution timeMemory
98445luciocfKronican (COCI16_kronican)C++14
100 / 100
1942 ms16900 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 21; const long long inf = 2e18+10; typedef long long ll; ll dp[1<<maxn]; int n, k; int num[maxn][maxn]; ll solve(int mask) { if (__builtin_popcount(mask) == k) return 0LL; if (dp[mask] != -1) return dp[mask]; ll ans = inf; for (int i = 0; i < n; i++) { if (!(mask&(1<<i))) continue; for (int j = 0; j < n; j++) { if (j == i || !(mask&(1<<j))) continue; int mask2 = mask^(1<<i); ans = min(ans, (ll)num[i][j]+solve(mask2)); } } return dp[mask] = ans; } int main(void) { cin >> n >> k; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) cin >> num[i][j]; memset(dp, -1LL, sizeof dp); cout << solve((1<<n)-1) << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...