System Error
/in/foo.cc: In function 'int main()':
/in/foo.cc:29:9: warning: suggest parentheses around operand of '!' or change '&' to '&&' or '!' to '~' [-Wparentheses]
if(!i&1<<k)
^~
/in/foo.cc:32:17: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
if(i==1<<n-1) ans=min(ans,dp[i|1<<k][j]);
~^~
VJ4Error('ProblemDataNotFoundError', '题目 59d77a7ed3d8a1361ae60a99 的数据未找到。', 'Randle', '59d77a7ed3d8a1361ae60a99')
代码
#include<bits/stdc++.h>
#define maxn 20
using namespace std;
int dp[maxn][maxn],a[maxn][maxn];
int ans=-1,n;
int min(int x,int y)
{
if(x==-1) return y;
if(y==-1) return x;
return x<y?x:y;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
memset(dp,-1,sizeof(dp));
for(int i=0;i<n;i++)
dp[1<<i][i]=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][j]=min(dp[i|1<<k][j],dp[i][j]+a[j][k]);
if(i==1<<n-1) ans=min(ans,dp[i|1<<k][j]);
}
}
}
}
}
if(ans!=-1)
cout<<ans<<endl;
return 0;
}