这是我的代码@[zxysxy](/space/show?uid=132235)
```
#include<bits/stdc++.h>
using namespace std;
int n,k=2147483647;
struct wc
{
int aa,kk;
};
struct sb
{
wc zz[21];
};
sb a[21];
int cc[21];
bool b[21];
bool cmp(wc wc1,wc wc2)
{
return wc1.aa<wc2.aa;
}
void dfs(int l,int s,int z)
{
if(s+n-l+1>=k)return;
if(l==n-1){k=min(k,s+cc[z]);return;}
for(int i=1;i<=n;i++)
{
if(s+a[z].zz[i].aa>=k)return;
if(!b[a[z].zz[i].kk])
{
b[a[z].zz[i].kk]=1;
dfs(l+1,s+a[z].zz[i].aa,a[z].zz[i].kk);
b[a[z].zz[i].kk]=0;
}
}
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++){for(j=1;j<=n;j++){scanf("%d",&a[i].zz[j].aa);a[i].zz[j].kk=j;}cc[i]=a[i].zz[1].aa;sort(a[i].zz+1,a[i].zz+n+1,cmp);}
b[1]=1;
dfs(0,0,1);
printf("%d",k);
}
```
by pzc2004 @ 2019-04-10 21:06:56