求c语言一道题的题解急Description有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地.如果要用1×2的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少

来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/17 15:41:24
求c语言一道题的题解急Description有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地.如果要用1×2的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少求c语

求c语言一道题的题解急Description有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地.如果要用1×2的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少
求c语言一道题的题解急
Description
有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地.如果要用1×2的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少陆地面积.
输入描述 Input Description
输入文件的第一行是两个整数N,M (1

求c语言一道题的题解急Description有一个N×M的单位方格中,其中有些方格是水塘,其他方格是陆地.如果要用1×2的矩阵区覆盖(覆盖过程不容许有任何部分重叠)这个陆地,那么最多可以覆盖多少
其实就是一个二分匹配.看这个矩阵
1 2 3
4 5 6
7 8 9
可以把:1 3 5 7 9作为1边
2 4 6 8 作为另外一边
然后做一个二分匹配.
i表示行,j表示列,公式表示就是 (i+j)%2 == 0是一边 (i+j)%2 == 1 是另一边
如果发现i,j是水塘,直接跳过就行了,然后对两边的数据进行匹配.
这样单边点的最大个数是5000,显然不能用匈牙利算法 O(n^3)
好久没做题,都忘了Dinic的复杂度.查了一下,用Dinic最大流的思想解决二分匹配的复杂度是 sqrt(V)*E
这道题V最大是5000,E最多是20000,Sqrt(V)*E = 1400000
应该是可以做的