/ Randle /

记录详情

Accepted


  
# 状态 耗时 内存占用
#1 Accepted 4ms 3.551 MiB
#2 Accepted 4ms 3.555 MiB
#3 Accepted 3ms 3.562 MiB
#4 Accepted 3ms 3.555 MiB
#5 Accepted 5ms 3.551 MiB
#6 Accepted 2ms 3.555 MiB
#7 Accepted 4ms 3.551 MiB
#8 Accepted 7ms 3.555 MiB
#9 Accepted 3ms 3.566 MiB
#10 Accepted 3ms 3.551 MiB

代码

#include<bits/stdc++.h>
using namespace std;
int a[17][17],dp[50001][17];
int ans=1000001,n;
inline const void read(int &a){
	a=0;
	char c=getchar();
	while(c<'0'||c>'9')
	c=getchar();
	while(c>='0'&&c<='9')
	{
		a=(a<<1)+(a<<3)+c-'0';
		c=getchar();
	}
}
int min(int a,int b)
{
	if(a==-1) return b;
	if(b==-1) return a;
	return a<b?a:b;
}
int main()
{
	read(n);
	n++;
	memset(dp,-1,sizeof(dp));
	for(int i=0;i<n;i++)
	for(int j=0;j<n;j++)
	read(a[i][j]);
	for(int i=0;i<n;i++)
	for(int j=0;j<n;j++)
	for(int k=0;k<n;k++)
	a[j][k]=min(a[j][k],a[j][i]+a[i][k]);
	dp[1][0]=0;
	for(int i=0;i<(1<<n);i++)
	for(int j=0;j<n;j++)
	    if(dp[i][j]!=-1)
	        for(int k=0;k<n;k++)
		    if(!(i&(1<<k)))
	    	{
		    	dp[i|(1<<k)][k]=min(dp[i|(1<<k)][k],dp[i][j]+a[j][k]);
		    	if((i|(1<<k))==((1<<n)-1))
		    	ans=min(ans,dp[i|1<<k][k]+a[k][0]);
	    	}
    cout<<ans<<endl;
    return 0;
}

信息

递交者
类型
递交
题目
送外卖
题目数据
下载
语言
C++
递交时间
2017-10-10 18:56:35
评测时间
2017-10-10 18:56:35
评测机
分数
100
总耗时
43ms
峰值内存
3.566 MiB