«问题描述:
在一个有m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任
意2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。
«编程任务:
对于给定的方格棋盘,按照取数要求编程找出总和最大的数。
«数据输入:
由文件grid.in提供输入数据。文件第1 行有2 个正整数m和n,分别表示棋盘的行数
和列数。接下来的m行,每行有n个正整数,表示棋盘方格中的数。
«结果输出:
程序运行结束时,将取数的最大总和输出到文件grid.out中。
输入文件示例 输出文件示例
grid.in
3 3
  1 2 3

3 2 3

2 3 1

grid.out

11

(1<=N,M<=30)

首先,数字不相邻,将格子分奇偶黑白染色。
s与黑格连边,白格与t连边,相邻格子连边求出最大流,用sum减一下就是答案。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
const int N=35;
const int inf=1e9+7;
int n,m,s,t,cnt=1,ans,hd[N*N],g[N][N],d[N*N];
queue<int>q;
struct edge
{int to,nxt,f;
}v[4*N*N+2*N];
void addedge(int x,int y,int z)
{v[++cnt].to=y;v[cnt].f=z;v[cnt].nxt=hd[x];hd[x]=cnt;
}
bool bfs()
{memset(d,0,sizeof(d));d[s]=1;q.push(s);while(!q.empty()){int u=q.front();q.pop();for(int i=hd[u];i;i=v[i].nxt)if(v[i].f&&!d[v[i].to]){d[v[i].to]=d[u]+1;q.push(v[i].to);}}return d[t];
}
int dfs(int u,int lft)
{if(u==t||lft==0)return lft;int r=lft;for(int i=hd[u];i;i=v[i].nxt)if(r&&v[i].f&&d[v[i].to]==d[u]+1){int w=dfs(v[i].to,min(r,v[i].f));v[i].f-=w,v[i^1].f+=w,r-=w;if(!r)return lft;}if(!r)d[u]=0;return lft-r;
}
int main()
{freopen("grid.in","r",stdin);freopen("grid.out","w",stdout);scanf("%d%d",&n,&m);s=0,t=n*m+1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)g[i][j]=(i-1)*m+j;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){int x;scanf("%d",&x);ans+=x;if((i+j)%2)addedge(s,g[i][j],x),addedge(g[i][j],s,0);elseaddedge(g[i][j],t,x),addedge(t,g[i][j],0);}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if((i+j)%2){if(i+1<=n)addedge(g[i][j],g[i+1][j],inf),addedge(g[i+1][j],g[i][j],0);if(i-1>=1)addedge(g[i][j],g[i-1][j],inf),addedge(g[i-1][j],g[i][j],0);if(j+1<=m)addedge(g[i][j],g[i][j+1],inf),addedge(g[i][j+1],g[i][j],0);if(j-1>=1)addedge(g[i][j],g[i][j-1],inf),addedge(g[i][j-1],g[i][j],0);}while(bfs())ans-=dfs(s,inf);printf("%d\n",ans);return 0;
}

COGS 734. [网络流24题] 方格取数问题相关推荐

  1. 734. [网络流24题] 方格取数问题 二分图点权最大独立集/最小割/最大流

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

  2. 洛谷2774:[网络流24题]方格取数问题——题解

    https://www.luogu.org/problemnew/show/P2774#sub 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有 ...

  3. Cogs 727. [网络流24题] 太空飞行计划(最大权闭合子图)

    [网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W 教授正在为国家航天中心计 ...

  4. XTU 二分图和网络流 练习题 C. 方格取数(1)

    C. 方格取数(1) Time Limit: 5000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d      Java class ...

  5. COGS 729. [网络流24题] 圆桌聚餐

    «问题描述: 假设有来自m 个不同单位的代表参加一次国际会议.每个单位的代表数分别为 ri(i=1,2,3...m), .会议餐厅共有n张餐桌,每张餐桌可容纳c i(i=1,2...n) 个代表就餐. ...

  6. COGS 729 [网络流24题] 圆桌聚餐

    «问题描述: 假设有来自m 个不同单位的代表参加一次国际会议.每个单位的代表数分别为 ri(i=1,2,3...m), .会议餐厅共有n张餐桌,每张餐桌可容纳c i(i=1,2...n) 个代表就餐. ...

  7. 最小割 ---- 二分图最大独立集(集合冲突模型) ---- 骑士共存 方格取数(网络流24题)

    二分图独立集 定理: 二分图最大独立集=n - 二分图最大匹配 其实二分图独立集是特殊的一种最大权闭合子图.我们根据上文"收益"的思想,把选某个点的收益看为1,左部节点为正权点,右 ...

  8. 【网络流24题】I、 方格取数问题(二分图的最大独立集/最小割)

    I. 方格取数问题(二分图的最大独立集/最小割) [问题分析] 二分图点权最大独立集,转化为最小割模型,从而用最大流解决. [建模方法] 首先把棋盘黑白染色,使相邻格子颜色不同,所有黑色格子看做二分图 ...

  9. 线性规划与网络流24题●09方格取数问题13星际转移问题

    ●(做codevs1908时,发现测试数据也涵盖了1907,想要一并做了,但因为"技术"不佳,搞了一上午) ●09方格取数问题(codevs1907  方格取数3) 想了半天,也没 ...

  10. 网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)

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

最新文章

  1. 2018java二级考试大纲_2018年全国计算机二级java考试简答题练习二
  2. canal能监控多个mysql_learning-mysql-canal
  3. “傻子”阿甘的大智慧
  4. 【逆天的算法】这几首宋词,你能看出来是出自计算机之手吗?
  5. Redhat下XFS的安装
  6. 关于ShopEx的二次开发的目录结构及各文件功能
  7. pdf导入ps颜色太浅_PDF 文件编辑转换难?或许你需要一个扫描全能王!
  8. qt中QHostAddress与QString相互转换
  9. 怎么拆除境地柜_内衣不合身拒绝接亲,精装房装修不满意怎么办?
  10. layui横向时间线_用打火机或烟头烧羽毛球拍线坏处多
  11. 远程监控系统集成方案
  12. C++ 面向对象 —— 实用程序片段
  13. 【ThinkPHP5.0RC2吃螃蟹之】关于ThinkPHP5.0的渲染模板输出
  14. ADC的DMA多通道数据采集(雨滴传感器+光敏传感器)
  15. spring整合redis菜鸟版
  16. JAVA:实现 gnome sort侏儒排序算法(附完整源码)
  17. C语言学习笔记(浙大翁恺版)第一周
  18. 数字图像处理八:图像分割
  19. 微信小程序数据绑定与模板语法
  20. 中国社科发布:十大知名调查研究咨询公司

热门文章

  1. 中国20强游戏公司2022上半年年报分析:复合因素下业绩增长承压,海外新兴市场蕴含增长新趋势
  2. 计算机网络CRC冗余码的计算
  3. itextpdf生成列表基本用法
  4. ISP 因特网服务提供商
  5. html超链接为变量,如何向超链接添加变量值
  6. 【Qt/C++异常笔记】间接寻址级别不同
  7. x86汇编_间接寻址-间接操作数_笔记_11
  8. cos和sin转换公式
  9. getvod.php_飞飞影视系统飞飞cms2.8标签大集合
  10. 【C语言】从你好世界开始