poj 2531 Network Saboteur

  题意:有n台电脑,然后给出电脑两两相连的链接速度,把这些电脑分成 两组,组内链接时间为0,求两组的最大链接速度。

  一台电脑分两种情况进行DFS,属于第一组或属于第二组。

#include<stdio.h>
#include<string.h>

int n;
int C[25][25];
int f[25];
int ans;
void DFS(int a,int sum)
{
    if(a==n)
    {
        if(sum>ans) ans=sum;
        return ;
    }
    int temp = 0;
    for(int i=0;i<a;i++)
        if(f[i]==2)
            temp+=C[a][i];
    f[a]=1;
    DFS(a+1,sum+temp);
    temp=0;
    for(int i=0;i<a;i++)
        if(f[i]==1)
            temp+=C[a][i];
    f[a]=2;
    DFS(a+1,sum+temp);
}
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=0;i<n;i++)    for(int j=0;j<n;j++)    scanf("%d",&C[i][j]);
        memset(f,0,sizeof(f));
        ans=0;f[0]=1;
        DFS(1,0);
        printf("%d\n",ans);
    }
    return 0;
}

 

 

posted @ 2013-09-01 22:08  yongren1zu  阅读(128)  评论(0编辑  收藏  举报