标签:text pos car osi nbsp sub arch txt math
题目代号:POJ 2531
题目链接:http://poj.org/problem?id=2531
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 13290 | Accepted: 6428 |
Description
Input
Output
Sample Input
3 0 50 30 50 0 40 30 40 0
Sample Output
90
Source
题目大意:这个题就是题目有点难以理解,相当于有n台服务器,现在要将n台服务器分配成2个区域,不同区域之间的任意两台服务器会通过两个区域之间的节点交换数据,现在要你求,节点通过的最大数据量是多少,第i行第j列的数值相当于第i台服务器与第j台服务器交换的数据量。
解题思路:dfs遍历一遍,每遍历一次获取最大值,最后输出就行了。
AC代码:
# include <stdio.h> # include <string.h> # include <stdlib.h> # include <iostream> # include <fstream> # include <vector> # include <queue> # include <stack> # include <map> # include <math.h> # include <algorithm> using namespace std; # define pi acos(-1.0) # define mem(a,b) memset(a,b,sizeof(a)) # define FOR(i,a,n) for(int i=a; i<=n; ++i) # define For(i,n,a) for(int i=n; i>=a; --i) # define FO(i,a,n) for(int i=a; i<n; ++i) # define Fo(i,n,a) for(int i=n; i>a ;--i) typedef long long LL; typedef unsigned long long ULL; int a[25][25],ans,n; int b[25]; void dfs(int num,int data) { int s=data; b[num]=1; for(int i=1;i<=n;i++) { if(b[i])data-=a[num][i]; else data+=a[num][i]; } ans=max(ans,data); for(int i=num+1;i<=n;i++) { if(data>s) { dfs(i,data); b[i]=0; } } return; } int main() { //freopen("in.txt", "r", stdin); while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]); ans=0; mem(b,0); dfs(1,0); cout<<ans<<endl; } return 0; }
POJ 2531 Network Saboteur(dfs)
标签:text pos car osi nbsp sub arch txt math
原文地址:http://www.cnblogs.com/teble/p/7243308.html