«问题描述:
在一个有m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任
意2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。
«编程任务:
对于给定的方格棋盘,按照取数要求编程找出总和最大的数。
第1 行有2 个正整数m和n,分别表示棋盘的行数
和列数。接下来的m行,每行有n个正整数,表示棋盘方格中的数。
将取数的最大总和输出
3 3
1 2 3
3 2 3
2 3 1
11
n,m<=30
题目可以在这里提交:http://wikioi.com/homework/23/
分析:二分图的最大点权独立集模型,将矩阵里面每个点拆成两个点,i和i+n*m,然后S向每个i建边,权值为该点的值,然后每个i+n*m向汇点T建边,权值为该点的值,然后每个点向它周围四个点建边,权值为无穷大,跑最大流即可。
代码:
//Isap算法,复杂度O(n^2m)
#pragma comment(linker,"/STACK:102400000,102400000")
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include