最小割方格取数总结,及题目总结

来源:互联网 发布:excel2007数据透视表 编辑:程序博客网 时间:2024/06/05 23:44

今天我发现了最小割方格取数这类问题,我觉得有些不好理解,于是我在网上找到了一篇总结的文章,我觉得写得蛮好的,然后就参照那篇文章自己总结了一下,方便自己以后更好的复习这类的问题。
总共有3类问题:
1.每个方格中有各自的权值,只能取不相邻的数,问怎样取格子才能使获得总权值最大。
题目集:HDU 1565 方格取数(1) HDU 1569 方格取数(2)

这样的题目我们要进行奇偶建图,源点S与奇点(i+j)%2==1,汇点T与偶点(i+j)%2==0相连,然后相邻的两点建边容量无穷大,源点和汇点向奇偶点建边,容量为权值。这样建图的意义在于,如果某一条边被割掉,那么就说明这个点不会被选了,那么为什么不可能选到两个相邻的点?因为相邻两点的边的容量为无穷大,那么这条边一定不会被割掉,也就是说要么和源点相连的点被割掉,要么和汇点相连的点被割掉!这样建图,被割掉一定是和源点或汇点相连的边(相当于把点给割掉了),结果是权值总和减去最小割(因为最大独立集=总权值-最小顶点覆盖集=总权值-最大流)。然而两点间建边无穷大,可以这么认为,目的是为了最大化取的点是相邻点的代价,通过这种方式使得相邻两点必定不能同时取(否则这个代价太大)。

2.每个方格中有各自的权值,可以任意取数,但是取相邻的两个点要付出一定的代价(减去),问怎样取格子才能使获得总权值最大。
题目集:HDU 3657 Game

这样的题目我们要进行奇偶建图,源点S与奇点(i+j)%2==1,汇点T与偶点(i+j)%2==0相连,然后相邻的两点建边容量无穷大,源点和汇点向奇偶点建边,容量为权值。意义和上面一样。但是这种题目和上面的第一种情况不一样的是因为可以去相邻的点,那么我们相邻点之间就不能建边无穷大来约束了。其实两点相连的约束条件其实就是相邻两点会被取走的代价。你可以这样理解,如果你去买东西,他给你获得的价值比你买他要付出的代价小,你就肯定不会去买了,因为人只会买对自己有意义的东西,要不然就得不偿失了,所以如果同时取走两点的代价超过取走这两点带来的价值,那么说明这个方案不是最好的,那我们就会只取其中最有利的一点。第一类问题其实就是通过将约束条件无穷大化来约束使得不能同时选择相邻的两点而已。

3.每个方格中有有两种不同的类型他们有各自的权值,可以任意取类型的权值,但是取相邻的两个相同类型的点要付出一定的代价(减去),如果不同类型就不用减去,问怎样取格子才能使获得总权值最大。
题目集:HDU 3820 Golden Eggs

这种类型的建图就和前面两种稍微有点不同了:奇点(i+j)%2==1的格子的第一种类型和源点S建边,第二种类型和汇点T建边,容量为该类型在该格子对应的权值。偶点(i+j)%2==0的格子的第一种类型和汇点T建边,第二种类型和源点S建边,容量为该类型在该格子对应的权值。这样由于同一个格子我们只能取走其中一个类型的权值,那么对这两个类型建边无穷大约束一下就好(参考第一种类型相邻问题的处理)。但是如果相邻两点取走了相同类型的权值怎么办?其实只要对该点的和源点S相连的属性与相邻点的同一属性建边就行了(相邻点和该点同一属性则相邻点的该属性必定和汇点相连)容量就是就是代价。这样建图以后,每个点要么选取其中一个代价,要么都不选。(记得要把点分割开来)

总结一下这一类问题,基本是奇偶建点发法建图,然后如果要求能取相邻点,那么相邻点建边,容量为代价,否则建边无穷大约束。建边无穷大可以约束两个条件使至多只能选取一个。(参考自博客)

原创粉丝点击