#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,k;
int a[50][50];
ll dp[2000005];
ll bitmask(int x){
if(__builtin_popcount(x)==k){
return 0;
}
ll val=1e18;
if(dp[x]!=-1) return dp[x];
for(int i=0;i<n;++i){
if((x&(1<<i))){
for(int j=0;j<n;++j){
if((x&(1<<j)) && j!=i){
val=min(val,bitmask(x&(~(1<<j)))+a[j][i]);
}
}
}
}
return dp[x]=val;
}
signed main(){
memset(dp,-1,sizeof dp);
cin>>n>>k;
for(int i=0;i<n;++i){
for(int j=0;j<n;++j) cin>>a[i][j];
}
cout<<bitmask((1<<n)-1);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |