#include"iostream"
using namespace std;
int n,maxx;
int c[22][22];
int v[22];
void calc()
{
int temp=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(v[i]&&!v[j]) temp+=c[i][j];
if(temp>maxx) maxx=temp;
}
void dfs(int k)
{
if(k==n)
{
calc();
return;
}
v[k]=1; dfs(k+1);
v[k]=0; dfs(k+1);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>c[i][j];
for(int i=1;i<=n;i++) v[i]=0;
dfs(1);
cout<<maxx;
return 0;
}
题目要求解两个距离和最远的子网络,只需要DFS每个点取与不取的状态就可以了,每DFS一次都要计算一下当前的距离和,保存最大值输出即可。
day3 POJ 2531 Network Saboteur
最新推荐文章于 2020-03-06 15:47:33 发布