摘要: 题意:给定一个网格图,图上有一些人要到一些房子当中去,人和房子的数量一样多,人和房子的曼哈顿距离作为行走的开销,问所有人走到房子中的最小开销。解法:将人和房子之间两两之间建立带权边,权值为曼哈顿距离的相反数,这样问题就转化为最大权值匹配问题。代码如下:#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int INF = 0x3f3f3f3f;int N 阅读全文
posted @ 2013-04-09 19:40 沐阳 阅读(285) 评论(0) 推荐(0) 编辑
摘要: //*******************************以下是转载的*******************************************二分图匹配算法总结二分图最大匹配的匈牙利算法二分图是这样一个图,它的顶点可以分类两个集合X和Y,所有的边关联在两个顶点中,恰好一个属于集合X,另一个属于集合Y。最大匹配:图中包含边数最多的匹配称为图的最大匹配。完美匹配:如果所有点都在匹配边上,称这个最大匹配是完美匹配。最小覆盖:最小覆盖要求用最少的点(X集合或Y集合的都行)让每条边都至少和其中一个点关联。可以证明:最少的点(即覆盖数)=最大匹配数最小路径覆盖:用尽量少的不相交简单路 阅读全文
posted @ 2013-04-09 18:07 沐阳 阅读(1377) 评论(3) 推荐(0) 编辑
摘要: 题意:有N件物品和V体积的背包,没见物品由所占空间和价值组成,现问第K大能够装多少物品?解法:通过增加一维信息f[i][j][k]表示占用放到第i件物品时空间为j是第k大值时多少,f[i][j][k]无法给出一个明确的转移的方程,但是我们知道第i件物品若放置的话那么能够由f[i][j-w[i]][1...K]生成K中状态,如果不放置的话就能由f[i][j][0...K]生成K种状态,分别由这2*K个状态能够得到放或者是不放的前K大,因为综合的前K大一定在放的前K大或者是不放的前K大里面。代码如下:#include <cstdlib>#include <cstdio>#i 阅读全文
posted @ 2013-04-09 14:15 沐阳 阅读(283) 评论(0) 推荐(0) 编辑