Submission #725512

#TimeUsernameProblemLanguageResultExecution timeMemory
725512vjudge1Kronican (COCI16_kronican)C++17
90 / 100
2086 ms8532 KiB
#include <bits/stdc++.h> using namespace std; const int MN=21; const int inf=1e9+7; int n,k; int board[MN][MN]; int dp[1<<MN]; int back(int bit){ // cout<<bit<<endl; if(__builtin_popcount(bit)==k) return 0; if(dp[bit]>0) return dp[bit]; int ans=inf; for(int i=1;i<=n;++i){ if(!(bit&(1<<(i-1)))) continue; for(int j=1;j<=n;++j){ if(i==j) continue; if(!(bit&(1<<(j-1)))) continue; ans=min(ans,board[j][i]+back(bit-(1<<(j-1)))); ans=min(ans,board[i][j]+back(bit-(1<<(i-1)))); // cout<<ans<<endl; } } return dp[bit]=ans; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); memset(dp,-1,sizeof(dp)); cin>>n>>k; for(int i=1;i<=n;++i){ for(int j=1;j<=n;++j){ cin>>board[i][j]; } } cout<<back((1<<n)-1); }
#Verdict Execution timeMemoryGrader output
Fetching results...