Submission #387997

#TimeUsernameProblemLanguageResultExecution timeMemory
387997tushar_2658Kronican (COCI16_kronican)C++14
100 / 100
1903 ms9552 KiB
#include "bits/stdc++.h" using namespace std; const int maxn = 21; using ll = long long; ll a[maxn][maxn]; ll dp[1 << maxn]; bool vis[1 << maxn]; int n, k; ll call(int mask){ if(__builtin_popcount(mask) <= k)return 0; if(vis[mask])return dp[mask]; vis[mask] = 1; ll ret = 1e18; for(int i = 0; i < n; ++i){ if((mask >> i) & 1){ for(int j = 0; j < n; ++j){ if(i == j)continue; if((mask >> j) & 1){ ret = min(ret, call(mask ^ (1 << i)) + a[i][j]); } } } } return dp[mask] = ret; } int main(int argc, char const *argv[]) { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> k; for(int i = 0; i < n; ++i){ for(int j = 0; j < n; ++j){ cin >> a[i][j]; } } cout << call((1 << n) - 1) << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...