/ Randle /

记录详情

Wrong Answer

/in/foo.cc: In function 'int main()':
/in/foo.cc:40:10: warning: suggest parentheses around operand of '!' or change '&' to '&&' or '!' to '~' [-Wparentheses]
       if(!i&(1<<k))
          ^~
# 状态 耗时 内存占用
#1 Wrong Answer 6ms 3.555 MiB
#2 Wrong Answer 5ms 3.715 MiB
#3 Wrong Answer 3ms 3.555 MiB
#4 Wrong Answer 4ms 3.691 MiB
#5 Wrong Answer 4ms 3.551 MiB
#6 Wrong Answer 3ms 3.551 MiB
#7 Wrong Answer 2ms 3.555 MiB
#8 Wrong Answer 3ms 3.551 MiB
#9 Wrong Answer 2ms 3.555 MiB
#10 Wrong Answer 2ms 3.566 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++)
	if(a[j][i]+a[i][k]<a[j][k])
	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]);
	    	}
    cout<<ans<<endl;
    return 0;
}

信息

递交者
类型
递交
题目
送外卖
题目数据
下载
语言
C++
递交时间
2017-10-10 18:45:50
评测时间
2017-10-10 18:45:50
评测机
分数
0
总耗时
39ms
峰值内存
3.715 MiB