Network Saboteur

深搜,不算裸,只是你要判断这两个集合一不一样.....代码:

#include<iostream>
using namespace std;
int a[1100][1100],b[1100];
int n;
int maxn=0;
void dfs(int k,int sum)
{
    b[k]=1;//标记.... 
    for(int i=1;i<=n;i++)
    {
        if(b[i])
        {
            sum-=a[k][i];//判重 
        }
        else
        {
            sum+=a[k][i];
        }
    }
    maxn=max(sum,maxn);//找最大值 
    for(int i=k+1;i<=n;i++)
    {
        b[i]=1;
        dfs(i,sum);//回溯 
        b[i]=0;
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cin>>a[i][j];
        }
    }
    dfs(1,0);//搜索 
    cout<<maxn<<endl;
}

A了QwQ

posted @ 2018-08-07 12:00  DJY_01  阅读(152)  评论(0编辑  收藏  举报