Submission #447301

#TimeUsernameProblemLanguageResultExecution timeMemory
447301dz001Kronican (COCI16_kronican)C++11
100 / 100
1475 ms16716 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define fi first #define se second #define MOD 1000000007 typedef long long ll; const int N=22; int a[N][N],dp[(1<<N)]; int n,k; int _dp(int mask){ if((int)bitset<32>(mask).count()==k)return 0; int &ans=dp[mask]; if(ans!=-1)return ans; ans=1e9; for(int i=0;i<n;++i){ if(!(mask&(1<<i)))continue; for(int j=0;j<n;++j){ if(!(mask&(1<<j))||i==j)continue; ans=min(ans,_dp(mask^(1<<i))+a[i][j]); } } return ans; } signed main(){ cin>>n>>k; for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ cin>>a[i][j]; } } memset(dp,-1,sizeof dp); cout<<_dp((1<<n)-1); #ifdef LOCAL cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << "s."; #endif }
#Verdict Execution timeMemoryGrader output
Fetching results...