#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
int n,k;
cin>>n>>k;
int a[n][n];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cin>>a[i][j];
}
int sz=pow(2,n);
int dp[sz];
memset(dp,127,sizeof dp);
dp[sz-1]=0;
int ans=LLONG_MAX;
for(int i=sz-1;i>=0;i--)
{
if(__builtin_popcount(i)==k)
ans=min(ans,dp[i]);
for(int j=0;j<n;j++)
{
if((i&(1<<j)))
{
int mn=LLONG_MAX;
for(int l=0;l<n;l++)
{
if(((i&(1<<l)))&&l!=j)
{
mn=min(mn,a[j][l]);
}
}
dp[i&(~(1<<j))]=min(dp[i&(~(1<<j))],mn+dp[i]);
//cout<<i<<" "<<(i&(~(1<<j)))<<" "<<mn<<" "<<endl;
}
}
}
//for(int i=0;i<sz;i++)
//cout<<dp[i]<<" ";
//cout<<(7&(1<<1));
cout<<ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |