【POJ1548】Robots Dilworth定理(偏序集定理2)

题意:

有一些位置有垃圾,让机器人从左上角开始走,只能往右或者往下,问最少走多少次可以清理完所有垃圾、

题解:

一看就是网络流经典题,或者说是二分图—最小路径覆盖;但是现在毕竟是在做一些贪心,这道题用的是一种贪心相关定理,Dilworth定理。

这道题可以理解为部分两点之间有偏序(可走的关系),呃,可以视为当xa<=xb&&ya<=yb时有偏序,那么姑且认为反之则为反偏序,那么定义一条链为由n-1个偏序连接起来的n个点,那么答案就是“最长反链的大小。

比如题中的数据1,我们经过处理得到2 4 4 6 4 7 6(排序去掉一维),然后就转化成了求最长下降子序列。

显然逆序对是不能互相到达的,而反链就是一个逆序链,即我们所求的最长下降子序列。

算是说了个大概,下面是偏序集的两个定理:

定理1 令(X,≤)是一个有限偏序集,并令r是其最大链的大小。则X可以被划分成r个但不能再少的反链。

其对偶定理称为Dilworth定理:

定理2 令(X,≤)是一个有限偏序集,并令m是反链的最大的大小。则X可以被划分成m个但不能再少的链。

说白了就是 链的最少划分数=反链的最长长度。

先贴代码题解再贴偏序相关。

模板是http://blog.csdn.net/error/404.html?from=http%3a%2f%2fblog.csdn.net%2fvmurder%2farticle%2fdetails%2f40818831

呃,图方便写了一发O(n^2)的算法,结果一直在写O(nlogn),然后(n^2)忘了,各种WA。。。我再也不写O(n^2)的lis了!!!

#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 6000
#define inf 0x3f3f3f3f
using namespace std;
struct KSD
{
	int x,y;
	bool operator < (const KSD &a)const
	{if(x==a.x)return y<a.y;return x<a.x;}
}s[N];
int n,m,f[N];
int main()
{
//	freopen("test.in","r",stdin);
	int i,j,k;
	int x,y;
	s[0].y=inf;
	while(scanf("%d%d",&x,&y),x+1&&y+1)
	{
		int cnt=0;
		while(x&&y){s[++cnt].x=x,s[cnt].y=y,scanf("%d%d",&x,&y);}
		sort(s+1,s+cnt+1);
		for(i=1;i<=cnt;i++)
		{
			f[i]=0;
			for(j=i-1;j>=0;j--)
			{
				if(s[j].y>s[i].y)f[i]=max(f[i],f[j]+1);
			}
		}
		int ans=0;
		for(i=1;i<=cnt;i++)ans=max(ans,f[i]);
		printf("%d\n",ans);
	}
	return 0;
}

偏序关系

偏序存在A<BA<C,则BC之间无法比较大小的现象。而对应的全序则必须是形如A<B<C的形式。即全序要求每个元素之间都能比较大小,偏序不要求。

目录


1简介


2举例解释:

1简介

形式定义:

设R是集合A上的一个二元关系,若R满足:

Ⅰ 自反性:对任意xA,有xRx

Ⅱ 反对称性:对任意x,yA,若xRy,且yRx,则x=y

Ⅲ 传递性:对任意xy,zA,若xRy,且yRz,则xRz

则称R为A上的偏序关系,通常记作?。注意这里的?不必是指一般意义上的“小于或等于”。

若然有x?y,我们也说x排在y前面(x precedes y)。

2举例解释:

对于上述提到的自反性和传递性的举例解释:

集合A={a,b,c...}上的关系R是自反 指的是R有(a,a),(b,b),(c,c)...

R是传递,指若有(a,b)和(b,c), 则必有(a,c).

偏序(Partial Order)的概念:

A是一个非空集,P是A上的一个关系,若P满足下列条件:

Ⅰ 对任意的aA,(a,a)∈P;(自反性 reflexlve)

Ⅱ 若(a,b)∈P,且(b,a)∈P,则 a=b;(反对称性,anti-symmentric)

Ⅲ 若(a,b)∈P,(b,c)∈P,则(a,c)∈P;(传递性,transitive)

则称P是A上的一个偏序关系。

若P是A上的一个偏序关系,我们用ab来表示(a,b)∈P。

整除关系便是一个定义在自然数上的一个偏序关系|,3|6的含义是3整除6。大于或等于也是定义在自然数集上的一个偏序关系。

偏序集

中文名

偏序集

记    作

(自反性)

对任一,则x≦x;

(反对称性)

如果x≦y,且y≦x,则x=y;

设R为非空集合A上的关系,如果R是自反的、反对称的和传递的,则称R为A上的偏序关系,简称偏序,通常记作≦。

一个集合A与A上的偏序关系R一起叫作偏序集,记作<A,R>或<A, ≦>。

(自反性)对任一

,则x≦x;

(反对称性)如果x≦y,且y≦x,则x=y;

(传递性)如果x≦y,且y≦c ,则x≦c.

时间: 2024-10-09 14:18:01

【POJ1548】Robots Dilworth定理(偏序集定理2)的相关文章

一阶非线性常微分方程解的存在性定理—Picard-Lindelof定理

上一节简单介绍了可求解的一阶常微分方程的解法,因为大部分非线性方程是不可解的,所以需要给出解的存在性的证明.本节主要介绍一阶非线性常微分方程Cauchy问题$$(E)\,\,\,\,\,\frac{dy}{dx}=f(x,y),\,\,\,\,\,y(x_{0})=y_{0}.$$解的存在性定理Picard-Lindelof定理(有的书上称它为Cauchy-Lipschitz定理). 对一阶常微分方程解的存在性理论作出重要贡献的数学家有Cauchy.Lipschitz.Picard.Lindel

CSU 1805 Three Capitals(矩阵树定理+Best定理)

http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1805 题意: A和B之间有a条边,A和G之间有b条边,B和G之间有c条边.现在从A点出发走遍所有的边,然后再回到A点,问一共有多少种方法. 思路: 16年湖南省赛题目,这道题目是求欧拉回路的个数,和生成树的计数有一定的联系. 首先给出神奇的Best定理,这是什么鬼定理,反正查不到什么有关该定理的文章... $ec(G)=t_s(G)\cdot deg(s)! \cdot \prod_{v\i

[bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT

Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔下的大家想象中的桃

POJ1548 Robots【二分图最小路径覆盖】

题目链接: http://poj.org/problem?id=1548 题目大意: 在一个N*M(N <= 24,M <= 24)的图中,有很多垃圾, 清理垃圾的机器人从左上角开始清理.已 知机器人只能向右或是向下清理垃圾,在清理完一个地方的垃圾后可以继续向右或是向下去清理 其他垃圾.最终运行到(N,M)的位置终止.问:最少需要多少个机器人,能清理完所有的垃圾. 思路: 图中没有给N和M的大小,只是给出了垃圾的位置.输入用0 0表示一组数据输入结束.建一个结构 体来存储垃圾的坐标值.现在来建

(转载)偏序集的Dilworth定理学习

导弹拦截是一个经典问题:求一个序列的最长不上升子序列,以及求能最少划分成几组不上升子序列.第一问是经典动态规划,第二问直接的方法是最小路径覆盖, 但是二分图匹配的复杂度较高,我们可以将其转化成求最长上升子序列,其最大值即等于不上升子序列的最小划分数.这就涉及到组合数学中偏序集的 Dilworth定理.(第二问的贪心方法其实就是这个定理的证明过程) 其中第一问和第二问都可以用o(nlogn)的算法解决: #include<cstdio> #include<cstring> #incl

HDU 1257 最少拦截系统(Dilworth定理+LIS)

最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 35053    Accepted Submission(s): 13880 Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的

棋盘的多米诺覆盖:Dimer Lattice Model,Pfaff 多项式,Kasteleyn 定理

这次来介绍计数组合学里面一个经典的问题:Dimer Lattice Model.问题是这样的:一个有 64 个方格的国际象棋棋盘,有多少种不同的多米诺骨牌覆盖?这里的覆盖是指不重复不遗漏地盖住整个棋盘. 下图是一种可能的覆盖方式(图片来自 Wiki 百科): 这个问题的答案是 12988816,非常大的一个数字,绝对不是一个一个数出来的.1961 年德国物理学家 Kasteleyn 借助于线性代数中的一个结论首先解决了这个问题,我们接下来就介绍他的方法. ~~~~~~~~~~~~~~~~~~~~

uva--10720Graph Construction +Havel--Hakimi定理

这是一个定理题;定理的具体内容见:http://blog.csdn.net/shuangde800/article/details/7857246 我的代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int cmp(int a,int b) { return a>b; } int main() { i

同余 模算术 中国剩余定理

相关知识点: 1.a≡b(modc),a,b关于模c同余  ,即a modc=b mod c , 等价于a%c=b 2.如果a,b互质(a,b)=1,则可得a关于模b的逆 ax≡1(modb) 3.关于余数的定理: 定理1 :如果被除数加上(或减去)除数的整数倍,除数不变,则余数不变. 定理2 :如果被除数扩大(或缩小)几倍,除数不变,则余数也扩大(或缩小)同样的倍数. 定理3: 如果整数a除以自然数b(b≠0),余数r仍不小于b,则r除以b的余数等于a除以b所得余数.(余数和被除数关于除数同余