Submission #638396

#TimeUsernameProblemLanguageResultExecution timeMemory
638396NeroZeinKronican (COCI16_kronican)C++14
100 / 100
651 ms4396 KiB
#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>

const int N = 20; 
int n,k,a[N][N],best[1<<N];

using namespace std;

signed main(){

    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin>>n>>k;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++)
            cin>>a[i][j];
    }
    int ans = 1e9;
    for(int mask=(1<<n)-2;mask>=0;mask--){
        best[mask] = 1e9;
        for(int i=0;i<n;i++){
            if ((mask&(1<<i)) == 0)continue;
            for(int j=0;j<n;j++){
                if ((mask&(1<<j)) == 1)continue;
                best[mask] = min(best[mask],best[mask|(1<<j)]+a[j][i]);
            }
        }
        if (__builtin_popcount(mask) == k)
            ans = min(ans, best[mask]);
    }cout<<ans;

}
#Verdict Execution timeMemoryGrader output
Fetching results...