rt
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,dis[20][20],f[1<<20][20],ans;
int main(){
memset(f,20,sizeof(f));
ans=f[1][1];
f[1][0]=0;
scanf("%lld",&n);
for (ll i=0;i<n;++i) for (ll j=0;j<n;++j) scanf("%lld",&dis[i][j]);
for (ll k=1;k<(1<<n);k+=2){
for (ll i=0;i<n;++i){
if (!((k>>i)&1)) continue;
for (ll j=0;j<n;++j){
if (j==i) continue;
if (!((k>>j)&1)) continue;
f[k][i]=min(f[k][i],f[k^(1<<i)][j]+dis[j][i]);
}
}
}
for (ll i=0;i<n;++i) ans=min(ans,f[(1<<n)-1][i]+dis[i][0]);
printf("%lld\n",ans);
return 0;
}
如果f数组开20就会MLE,但是开19的话最后一个测试点会RE,有没有dalao知道如何解决QAQ