【poj 2531】Network Saboteur 题意&题解&代码(C++)
2016-03-23 13:06
489 查看
题目链接:
http://poj.org/problem?id=2531
题意:
给出一个n×n的矩阵dis,dis[i][j]表示第i个点和第j个点的距离,要求将这n个点分为两个集合A和B,定义sum为 集合A中各点 到 集合B中各点 的距离和,求最大的sum。
题解:
dfs暴搜,先默认都在集合A,每次两个状态即将i点移到B或者不移,2的20次方乘以20,可以过。。
代码:
http://poj.org/problem?id=2531
题意:
给出一个n×n的矩阵dis,dis[i][j]表示第i个点和第j个点的距离,要求将这n个点分为两个集合A和B,定义sum为 集合A中各点 到 集合B中各点 的距离和,求最大的sum。
题解:
dfs暴搜,先默认都在集合A,每次两个状态即将i点移到B或者不移,2的20次方乘以20,可以过。。
代码:
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> using namespace std; int ans,n,dis[25][25],set[25]; void dfs(int now,int sum) { if (sum>ans) ans=sum; if (now>=n+1) return ; set[now]=1; int tmp=sum; for (int i=1;i<=n;i++) { if (set[i]) tmp-=dis[now][i]; else tmp+=dis[now][i]; } dfs(now+1,tmp); set[now]=0; dfs(now+1,sum); } int main() { scanf("%d",&n); ans=-1; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) scanf("%d",&dis[i][j]); dfs(1,0); printf("%d\n",ans); }
相关文章推荐
- C++ const_cast运算符
- 面向对象分析与设计(C++)课堂笔记
- C++调试基础
- c++ int double string互转
- C++初始化问题
- C++编译过的C代码为什么要用extern C
- c语言学习之函数补漏
- c++运算符重载
- C++开源代码项目汇总
- c++中的虚函数
- C++中的数组和指针
- VC++改变窗口背景颜色和使得Static控件背景透明
- C++ 学习
- VC++ 利用MAPI实现在程序中调用默认的电子邮件程序发送EMAIL(可以添加附件)。
- C++保留的关键字
- C++ map的基本操作和使用
- vc++程序开机自启动和取消启动
- c++ --> 重载、重写(覆盖)和隐藏的区别
- C++中的虚函数问题
- leetcode 280: Wiggle Sort