제출 #883683

#제출 시각아이디문제언어결과실행 시간메모리
883683vjudge1Kronican (COCI16_kronican)C++17
100 / 100
722 ms8656 KiB
#include <bits/stdc++.h> using namespace std; #define sp << " " << #define int long long #define vi vector<int> #define F(xxx,yyy) for (int xxx=1;xxx<=yyy;xxx++) #define pii pair<int,int> void solve() { int n,k; cin >> n >> k; int a[n+1][n+1]; F(i,n) { F(j,n) cin >> a[i][j]; } for (int i=1;i<=n;i++) { for (int j=1;j<=n;j++) { for (int m=1;m<=n;m++) { a[i][j] = min(a[i][j],a[i][m]+a[m][j]); } } } int lim = (1<<n); vi dp(lim,2e18); for (int mask = 0;mask<lim;mask++) { int pc = __builtin_popcountll(mask); if (pc == k) { dp[mask] = 0; continue; } if (pc < k) continue; for (int j=0;j<n;j++) { if (mask&(1<<j)) { for (int jj=0;jj<n;jj++) { if (jj==j) continue; if(!(mask&(1<<jj))) continue; dp[mask] = min(dp[mask],dp[mask^(1<<j)]+a[j+1][jj+1]); } } } } cout << dp[lim-1] << endl; } signed main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifdef Local freopen("in","r",stdin); freopen("out","w",stdout); #endif int t = 1; //cin >> t; F(i,t) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...