标签:搜索
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 9435 | Accepted: 4458 |
Description
Input
Output
Sample Input
3 0 50 30 50 0 40 30 40 0
Sample Output
90
题意 :给出n个点和他们之间的权值Cij,现在要将n个点分为两部分,求∑Cij (i∈A,j∈B)最大
思路:dfs暴搜
算是没剪枝吧。。跑了219MS sad
#include <algorithm> #include <iostream> #include <cstring> #include <cstdlib> #include <string> #include <cctype> #include <vector> #include <cstdio> #include <cmath> #include <queue> #include <stack> #include <map> #include <set> #define ll long long #define maxn 360 #define pp pair<int,int> #define INF 0x3f3f3f3f #define max(x,y) ( ((x) > (y)) ? (x) : (y) ) #define min(x,y) ( ((x) > (y)) ? (y) : (x) ) using namespace std; int ma[23][23],n,ans; bool vis[23]; void dfs(int x,int num,int sum) { if(num>n/2+1)return ; int t=0; ans=max(ans,sum); for(int i=x+1;i<=n;i++) { if(!vis[i]) { vis[i]=1; int tem=sum; for(int j=1;j<=n;j++) if(vis[j]) tem-=ma[i][j]; else tem+=ma[i][j]; dfs(i,num+1,tem); vis[i]=0; } } } int main() { while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&ma[i][j]); memset(vis,0,sizeof(vis)); ans=-INF; dfs(0,0,0); printf("%d\n",ans); } return 0; }
POJ 2531-Network Saboteur(DFS)
标签:搜索
原文地址:http://blog.csdn.net/qq_16255321/article/details/41318905