记录编号 176843 评测结果 AAAAAAAAAA
题目名称 售货员的难题 最终得分 100
用户昵称 Gravatar一個人的雨 是否通过 通过
代码语言 C++ 运行时间 0.059 s
提交时间 2015-08-10 06:39:33 内存使用 18.31 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int maxs=1<<18;
int n,m,opt[maxs][18];
int a[20][20];

int main()
{
	freopen("salesman.in","r",stdin);
	freopen("salesman.out","w",stdout);
	scanf("%d",&n);
	for (int i=1;i<=n;++i)
	   for (int j=1;j<=n;++j)
	      scanf("%d",&a[i][j]);
	for (int i=3;i<1<<n;++i)
	   for (int j=1;j<=n;++j)
		  opt[i][j]=0x7fffffff/3;
	for (int i=3;i<1<<n;++i)
	   for (int j=2;j<=n;++j)
		  if (i&(1<<j-1))
			 for (int k=1;k<=n;++k)
				if (j!=k&&(i&(1<<k-1)))
					opt[i][j]=min(opt[i][j],opt[i^(1<<j-1)][k]+a[k][j]);
	int ans=0x7fffffff;
	for (int i=1;i<=n;++i){
		opt[(1<<n)-1][i]+=a[i][1];//不要写a[1][i]......
		ans=min(ans,opt[(1<<n)-1][i]);
	}
	printf("%d",ans);
	return 0;
}