C. 方格取数(1)

Time Limit: 5000ms
Memory Limit: 32768KB

64-bit integer IO format: %I64d      Java class name: Main

 
给你一个n*n的格子的棋盘,每个格子里面有一个非负数。
从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大。

 

Input

包括多个测试实例,每个测试实例包括一个整数n 和n*n个非负数(n<=20)

 

Output

对于每个测试实例,输出可能取得的最大的和

 

Sample Input

  1. 3
  2. 75 15 21
  3. 75 15 28
  4. 34 70 5

Sample Output

  1. 188
  2.  
  3. 解题:有人用状态压缩dp做啊,我只能对着别人的代码敲了。。。。。
  4.  
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <climits>
  7. #include <vector>
  8. #include <queue>
  9. #include <cstdlib>
  10. #include <string>
  11. #include <set>
  12. #define LL long long
  13. #define INF 0x3f3f3f3f
  14. using namespace std;
  15. const int maxn = ;
  16. int mp[maxn*maxn],tot,n,src,sink;
  17. int c[maxn][maxn];
  18. bool vis[maxn];
  19. int dfs(int u,int low){
  20. if(u == sink) return low;
  21. if(vis[u]) return ;
  22. vis[u] = true;
  23. for(int v = ,flow; v <= sink; v++){
  24. if(c[u][v] && (flow = dfs(v,min(low,c[u][v])))){
  25. c[u][v] -= flow;
  26. c[v][u] += flow;
  27. return flow;
  28. }
  29. }
  30. return ;
  31. }
  32. int maxFlow(){
  33. int ans = ,flow;
  34. memset(vis,false,sizeof(vis));
  35. while(flow = dfs(src,INF)){
  36. memset(vis,false,sizeof(vis));
  37. ans += flow;
  38. }
  39. return ans;
  40. }
  41. int main(){
  42. int i,j,temp;
  43. while(~scanf("%d",&n)){
  44. j = n*n;
  45. src = tot = ;
  46. sink = j+;
  47. memset(mp,,sizeof(mp));
  48. memset(c,,sizeof(c));
  49. for(i = ; i <= j; i++){
  50. scanf("%d",&temp);
  51. tot += temp;
  52. if(i <= n) mp[i] = !mp[i-];
  53. else mp[i] = !mp[i-n];
  54. if(mp[i]){
  55. if(i%n) c[i][i+] = INF;//右边
  56. if(i%n != ) c[i][i-] = INF;//左边
  57. if(i <= n*(n-)) c[i][n+i] = INF;//下边
  58. if(i > n) c[i][i-n] = INF;//上边
  59. c[src][i] = temp;
  60. }else c[i][sink] = temp;
  61. }
  62. printf("%d\n",tot-maxFlow());
  63. }
  64. return ;
  65. }

XTU 二分图和网络流 练习题 C. 方格取数(1)的更多相关文章

  1. Cogs 734. [网络流24题] 方格取数问题(最大闭合子图)

    [网络流24题] 方格取数问题 ★★☆ 输入文件:grid.in 输出文件:grid.out 简单对比 时间限制:1 s 内存限制:128 MB «问题描述: 在一个有m*n 个方格的棋盘中,每个方格 ...

  2. AC日记——[网络流24题]方格取数问题 cogs 734

    734. [网络流24题] 方格取数问题 ★★☆   输入文件:grid.in   输出文件:grid.out   简单对比时间限制:1 s   内存限制:128 MB «问题描述: 在一个有m*n ...

  3. [网络流24题] 方格取数问题/骑士共存问题 (最大流->最大权闭合图)

    洛谷传送门 LOJ传送门 和太空飞行计划问题一样,这依然是一道最大权闭合图问题 “骑士共存问题”是“方格取数问题”的弱化版,本题解不再赘述“骑士共存问题”的做法 分析题目,如果我们能把所有方格的数都给 ...

  4. [网络流24题] 方格取数问题(cogs 734)

    «问题描述:在一个有m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法.«编程任务:对于给定的方格棋 ...

  5. XTU 二分图和网络流 练习题 B. Uncle Tom's Inherited Land*

    B. Uncle Tom's Inherited Land* Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO format: %I ...

  6. XTU 二分图和网络流 练习题 J. Drainage Ditches

    J. Drainage Ditches Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d      Ja ...

  7. luogu2774 [网络流24题]方格取数问题 (最小割)

    常见套路:棋盘黑白染色,就变成了一张二分图 然后如果选了黑点,四周的白点就不能选了,也是最小割的套路.先把所有价值加起来,再减掉一个最少的不能选的价值,也就是割掉表示不选 建边(S,黑点i,v[i]) ...

  8. LibreOJ #6007. 「网络流 24 题」方格取数 最小割 最大点权独立集 最大流

    #6007. 「网络流 24 题」方格取数 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  9. P2774 方格取数问题 网络流

    题目: P2774 方格取数问题 题目背景 none! 题目描述 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大. ...

随机推荐

  1. 福建工程学院第七届ACM程序设计新生赛 (同步赛)

    A.关电脑 #include<bits/stdc++.h> using namespace std; typedef long long LL; int T,h1,m1,s1,h2,m2, ...

  2. Steps to Resolve the Database JAVAVM Component if it Becomes INVALID After Applying an OJVM Patch

    11.2.0.2升级到11.2.0.4 memory_target 设置过小,只有800M. 导致jserver jave virtual machine 组件无法安装, 建议升级之前至少memory ...

  3. NIO客户端主要创建过程

    NIO客户端主要创建过程:   步骤一:打开SocketChannel,绑定客户端本地地址(可选,默认系统会随机分配一个可用的本地地址),示例代码如下:    SocketChannel client ...

  4. vs 2015 编译cocos2dx 报错

    VS 2015 compiling cocos2d-x 3.3 error “fatal error C1189: #error: Macro definition of snprintf confl ...

  5. Android手机屏幕投射到电脑神器Vysor

    做android开发的,经常要把手机屏幕投射到电脑,用来演示.普遍的解决方案是360或者豌豆荚的演示功能,缺点是延迟非常厉害,大概有3秒左右,非常影响演示效果.以下介绍Vysor,几乎0延迟,能与手机 ...

  6. findFile的用法

    ===============================================   @echo off   echo **No Options:   for /f %%a in (&q ...

  7. 更新centos系统的python版本

    因今天安装一程序需要用到python高版本,所以升级来系统自带的python. 先查询下系统的python版本是多少. #python -V 显示出来的是2.4.3,太老了,现在升级到比较稳定的版本3 ...

  8. PHP环境搭建Zend Studio 10.6.2+WampServer2.4

    址:http://www.zend.com/en/products/studio/downloads直接下载地址:http://downloads.zend.com/studio-eclipse/10 ...

  9. Android(java)学习笔记159:多线程断点下载的原理(Android实现)

    之前在Android(java)学习笔记215中,我们从JavaSE的角度去实现了多线程断点下载,下面从Android角度实现这个断点下载: 1. 新建一个Android工程: (1)其中我们先实现布 ...

  10. postman做压力测试

    压力测试 当你需要验证你的接口的抗压能力的时候,可以点击Runner,进行压力测试 注意:压力测试只能以文件夹的方式执行多个接口,不能单独执行,如果想要测试某一个接口,就创一个文件夹,这个文件夹里只有 ...