题目大意:原题链接

给定n个节点,任意两个节点之间有权值,把这n个节点分成A,B两个集合,使得A集合中的每一节点与B集合中的每一节点两两结合(即有|A|*|B|种结合方式)权值之和最大。

标记:A集合:true  B集合:false

解法一:dfs+剪枝

  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. int n,ans;
  5. bool in[];
  6. int graph[][];
  7. void dfs(int i,int cursum)
  8. {
  9. in[i]=true;
  10. int maxsum=cursum;
  11. for(int j=;j<=n;j++){
  12. if(!in[j]) maxsum+=graph[i][j];
  13. else maxsum-=graph[i][j];
  14. }
  15. if(maxsum>ans) ans=maxsum;
  16. if(maxsum>cursum){//枚举+递归
  17. for(int j=i+;j<=n;j++)
  18. dfs(j,maxsum);
  19. }//如果加进A组没有使得maxsum增大,则不加进去
  20. in[i]=false;
  21. }
  22. int main()
  23. {
  24. cin>>n;
  25. memset(in,,sizeof(in));
  26. for(int i=;i<=n;i++){
  27. for(int j=;j<=n;j++)
  28. cin>>graph[i][j];
  29. }
  30. ans=;
  31. dfs(,);
  32. cout<<ans<<endl;
  33. }

解法二:随机化算法(好神奇的思路)

  1. #include<iostream>
  2. #include<cstdlib>
  3. using namespace std;
  4. const int TLE=;//本题时间限制为2000ms
  5. int main()
  6. {
  7. int n,m[][];
  8. cin>>n;
  9. for(int i=;i<=n;i++){
  10. for(int j=;j<=n;j++)
  11. cin>>m[i][j];
  12. }
  13. /*Random Algorithm*/
  14. bool in[]={false};
  15. int time=*TLE;//使随机次数尽可能大,随机结果尽可能接近最优解
  16. int maxsum=,cursum=;
  17. while(time--){
  18. int x=rand()%n+;//范围:1~n
  19. in[x]=!in[x];//改变x所在的集合位置
  20. for(int i=;i<=n;i++){
  21. if(in[i]!=in[x]) cursum+=m[i][x];
  22. else cursum-=m[i][x];
  23. }
  24. if(maxsum<cursum) maxsum=cursum;
  25. }
  26. cout<<maxsum<<endl;
  27. }

PKU 2531 Network Saboteur(dfs+剪枝||随机化算法)的更多相关文章

  1. POJ2531Network Saboteur(DFS+剪枝)

    Network Saboteur Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10391   Accepted: 4990 ...

  2. POJ 2531 Network Saboteur (枚举+剪枝)

    题意:给你一个图,图中点之间会有边权,现在问题是把图分成两部分,使得两部分之间边权之和最大. 目前我所知道的有四种做法: 方法一:状态压缩 #include <iostream> #inc ...

  3. poj 2531 Network Saboteur( dfs )

    题目:http://poj.org/problem?id=2531 题意:一个矩阵,分成两个集合,求最大的 阻碍量 改的 一位大神的代码,比较简洁 #include<stdio.h> #i ...

  4. poj 2531 Network Saboteur(经典dfs)

    题目大意:有n个点,把这些点分别放到两个集合里,在两个集合的每个点之间都会有权值,求可能形成的最大权值.   思路:1.把这两个集合标记为0和1,先默认所有点都在集合0里.             2 ...

  5. POJ 2531 Network Saboteur 位运算子集枚举

    题目: http://poj.org/problem?id=2531 这个题虽然是个最大割问题,但是分到dfs里了,因为节点数较少.. 我试着位运算枚举了一下,开始超时了,剪了下枝,1079MS过了. ...

  6. POJ 2531 Network Saboteur

    http://poj.org/problem?id=2531 题意 :有N台电脑,每两台电脑之间都有个通信量C[i][j]; 问如何将其分成两个子网,能使得子网之间的通信量最大. 也就是说将所有节点分 ...

  7. poj 2531 Network Saboteur 解题报告

    题目链接:http://poj.org/problem?id=2531 题目意思:将 n 个点分成两个部分A和B(也就是两个子集啦), 使得子集和最大(一定很难理解吧,呵呵).举个例子吧,对于样例,最 ...

  8. Network Saboteur(dfs)

    http://poj.org/problem?id=2531 不太理解这个代码... #include <stdio.h> #include <string.h> ][],v[ ...

  9. POJ-2561 Network Saboteur(DFS)

    题目: A university network is composed of N computers. System administrators gathered information on t ...

随机推荐

  1. Openwrt 移植hello world

    下载openwrt项目源代码.參考http://blog.csdn.net/u011641885/article/details/46348267 编译交叉工具链:进入工作文件夹,运行make men ...

  2. linux下解压 tar.bz2

    tar xvfj xxx.tar.bz2 转自: http://www.360doc.com/content/12/0907/16/8006573_234845810.shtml

  3. 返回flag

    //修改前namespace CleanCSharp.Errors.Dirty { public class SomeClass { public int DoSomeProcess(int? id) ...

  4. php 文件下载代码

    1.对于一般 $file = "/tmp/dummy.tar.gz"; header("Content-type: application/octet-stream&qu ...

  5. ios 从URL中截取所包含的参数,并且以字典的形式返回和参数字典转URL

    //字典转链接(参数) - (NSString *)keyValueStringWithDict:(NSDictionary *)dict { if (dict == nil) { return ni ...

  6. JQuery------实现点击左右按钮,切换图片功能

    如图: 代码: html @*商品主图片*@ <div class="product-img" style="display:table-cell;width:40 ...

  7. Qt slot中获取sender

    调用sender();函数 例如获取一个QRadioButton QRadioButton *rb = qobject_cast<QRadioButton *>(sender());

  8. vue 添加过滤器-以格式化日期为例

    vue的filter和angular的pipe管道类似,是过滤器 官网:https://cn.vuejs.org/v2/guide/filters.html 添加格式化日期的全局过滤器 在main.j ...

  9. fieldmeta 基于springboot的字段元数据管理,通用代码生成,快速开发引擎

    fieldmeta: 基于springboot的字段元数据管理 version:Alpha 0.0.1 ,码云地址:https://gitee.com/klguang/fieldmeta 元数据(Me ...

  10. 160304-01、mysql数据库插入速度和读取速度的调整记录

    需求:由于项目变态,需要在一个比较短时间段急剧增加数据库记录(两三天内,由于0增加至5亿).在整个过程调优过程非常艰辛 思路: (1)提高数据库插入性能中心思想:尽量将数据一次性写入到Data Fil ...