Submission #1327293

#TimeUsernameProblemLanguageResultExecution timeMemory
1327293Zone_zoneeKronican (COCI16_kronican)C++20
100 / 100
470 ms8628 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 21;

int a[N][N];
int dp[1<<N];
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, k;    
    cin >> n >> k;
    for(int i = 0; i < n; ++i){
        for(int j = 0; j < n; ++j){
            cin >> a[i][j];
        }
    }
    for(int k = 0; k < n; ++k){
        for(int i = 0; i < n; ++i){
            for(int j = 0; j < n; ++j){
                a[i][j] = min(a[i][j], a[i][k] + a[k][j]);
            }
        }
    }
    int res = 2e9;
    memset(dp, 0x3f, sizeof dp);
    for(int msk = 1; msk < (1<<n); ++msk){
        if(__builtin_popcount(msk) < k) continue;
        if(__builtin_popcount(msk) == k) dp[msk] = 0;
        for(int i = 0; i < n; ++i){
            if(!((msk)&(1<<i))) continue;
            for(int j = 0; j < n; ++j){
                if((msk)&(1<<j)) continue;
                dp[msk|(1<<j)] = min(dp[msk|(1<<j)], dp[msk]+a[j][i]);
            }
        }
    }
    cout << dp[(1<<n)-1] << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...