题意:在一个网络中有n个节点,现在需要把n个节点分成两部分,每部分之间的通信代价为0,不同部分之间的通信代价为Cij。求一种划分方式,是的总得代价最大。
我用的是暴力dfs.500+过。总得来说这道题目还是很简单的。
代码:
#include<iostream>
using namespace std;
int a[25][25],visit[25],n,ans;
void dfs(int index,int sum)
{
if(index==n)
{
if(ans<sum) ans=sum;
return ;
}
int j,temp=0;
for(j=0;j<index;j++)
{
if(visit[j]==2)
temp+=a[index][j];
}
visit[index]=1;
dfs(index+1,sum+temp);
temp=0;
for(j=0;j<index;j++)
{
if(visit[j]==1)
temp+=a[index][j];
}
visit[index]=2;
dfs(index+1,sum+temp);
}
int main()
{
int i,j;
cin>>n;
memset(a,0,sizeof(a));
memset(visit,0,sizeof(visit));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
visit[0]=1;
ans=0;
dfs(1,0);
cout<<ans<<endl;
system("pause");
return 0;
}