Description 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完. Input 第一行为正整数T,代表数据组数. 每组数据第一行为正整数N,M代表网格图有N行M列,接下来N行每行M个非负整数,表示此格子中财宝数量,0代表没有 Output 输出一个整数,表示至少要走多少次. Sample Input 1 3 3 0 1 5…
题目 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完. 输入格式 第一行为正整数T,代表数据组数. 每组数据第一行为正整数N,M代表网格图有N行M列,接下来N行每行M个非负整数,表示此格子中财宝数量,0代表没有 输出格式 输出一个整数,表示至少要走多少次. 输入样例 1 3 3 0 1 5 5 0 0 1 0 0 输出样例 10…
题目名字是什么就不能往那方面想. 每个点拆成a[i][j]个,问题变为DAG最小路径覆盖,由Dilworth定理转成最长反链. 使用Dilworth定理的时候要注意那些点之间有边,这里任意一个点和其右下方的所有点都有边. 从右上往左下DP统计答案即可. #include<cstdio> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) using namespace std; ; int T…
copy: Dilworth定理:DAG的最小链覆盖=最大点独立集 最小链覆盖指选出最少的链(可以重复)使得每个点都在至少一条链中 最大点独立集指最大的集合使集合中任意两点不可达 此题中独立的定义即是两点满足一个在左下一个在右上(或在同一格).于是只需要找一条从左下到右上权值和最大的路径. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cst…
3997: [TJOI2015]组合数学 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 405  Solved: 284[Submit][Status][Discuss] Description 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完.   Input 第一行为正整数T,代…
BZOJ DAG中,根据\(Dilworth\)定理,有 \(最长反链=最小链覆盖\),也有 \(最长链=最小反链划分数-1\)(这个是指最短的最长链?并不是很确定=-=),即把所有点划分成最少的集合,使得集合内的点两两之间没有边. 直接状压.设\(f[s]\)表示\(s\)集合内的点是否满足两两之间没有边,\(g[s]\)表示最少可以将\(s\)划分为几个集合使得集合内两两没有边. 那么如果\(f[s']=1\ (s'\in s)\),\(g[s]=\min(g[s],\ g[s\ \text…
组合数学 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完.   Input 第一行为正整数T,代表数据组数. 每组数据第一行为正整数N,M代表网格图有N行M列,接下来N行每行M个非负整数,表示此格子中财宝数量,0代表没有 Output 输出一个整数,表示至少要走多少次.   Sample Input 1 3 3 0 1 5 5 0…
http://www.lydsy.com/JudgeOnline/problem.php?id=3997 偏序集,看上一篇随笔. 我们要求最少路径覆盖,可以等价于求最大独立集. 我们要找到一个权值和最大的点集$S$,使得对于点集中任意两个点$点i$和$点j$,使得$点i$不能到$点j$,就是要求$点i$严格在$点j$的右上方或左下方.用DP可以在$O(N^2)$内解决. #include<cstdio> #include<cstdlib> #include<iostream&…
http://www.lydsy.com/JudgeOnline/problem.php?id=3997 最小链覆盖=最长反链长度 所以题目等价于寻找一条从右上角到左下角的最长路 #include<cstdio> #include<cstring> #include<iostream> using namespace std; #define N 1002 int a[N][N]; long long dp[N][N]; void read(int &x) {…
题目大意: https://www.luogu.org/problemnew/show/P1020 Dliworth有两个互相对偶的定理:U的链划分使用的最少集合数,等于它的最大反链长度.(1)U的反链划分使用的最少集合数,等于它的最大链长度.(2) 更详细的讲解 #include <bits/stdc++.h> using namespace std; ]; ],dp2[]; ],f2[]; /// 将 对应长度的最后一位的下标 存入f1[] f2[]中 /* 即若 2 2 4 3 对应下标…
题目描述 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完. 输入 第一行为正整数T,代表数据组数. 每组数据第一行为正整数N,M代表网格图有N行M列,接下来N行每行M个非负整数,表示此格子中财宝数量,0代表没有 输出 输出一个整数,表示至少要走多少次. 样例输入 1 3 3 0 1 5 5 0 0 1 0 0 样例输出 10 题解…
题目描述 有一个\(n\times m\)的网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完. 此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完. \(n,m\leq 1000\) 题解 定义偏序关系 把一个格子拆成很多个点,每个点代表一个财宝. 对于两个点\(a,b\),称\(a<b\)当且仅当\(a\)能走到\(b\) 那么这道题求的是最小链覆盖 根据Dilworth定理,最小链覆盖数…
3997: [TJOI2015]组合数学 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 919  Solved: 664 Description 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完. Input 第一行为正整数T,代表数据组数. 每组数据第一行为正整数N,M代表网格图有…
[BZOJ3997][TJOI2015]组合数学(动态规划) 题面 BZOJ 洛谷 题解 相当妙的一道题目.不看题解我只会暴力网络流 先考虑要求的是一个什么东西,我们把每个点按照\(a[i][j]\)拆成若干个点,每个具有二维偏序关系的点之间连一条边,于是我们就有了一个\(DAG\),要求的就是\(DAG\)的最小链覆盖. 然后又有最小链覆盖等于最大独立集,所以本质上就是求一个最大的集合满足任意两点之间不存在二维偏序. 于是问题变成了从左下角到右上角找到一条路径使得路径权值最大. 这个东西可以简…
3997: [TJOI2015]组合数学 题意:\(n*m:\ n \le 1000\)网格图,每个格子有权值.每次从左上角出发,只能向下或右走.经过一个格子权值-1.至少从左上角出发几次所有权值为0. 容易发现偏序关系 \[ x_1 \le x_2, y_1 \le y_2 \] 最少链数=最长反链大小 但是本题每个元素有权值 容易发现,最少链数=最大权值反链的权值 然后我沙茶的写了一个\(O(n^4)\)的DP就T掉了 怒写二维树状数组,A了 其他人怎么辣么快啊,然后发现直接 f[i][j]…
题目描述 一个二维平面上有\(n\)个梯形,满足: 所有梯形的下底边在直线\(y=0\)上. 所有梯形的上底边在直线\(y=1\)上. 没有两个点的坐标相同. 你一次可以选择任意多个梯形,必须满足这些梯形两两重叠,然后删掉这些梯形. 问你最少几次可以删掉所有梯形. \(n\leq {10}^5\) 题解 先把坐标离散化. 定义\(A\)为所有梯形组成的集合. 我们定义\(A\)上的严格偏序:两个梯形\(a<b\)当且仅当\(a\)与\(b\)不重叠且\(a\)在\(b\)的左边. 那么每次删掉的…
[BZOJ3997][TJOI2015]组合数学 Description 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完. Input 第一行为正整数T,代表数据组数. 每组数据第一行为正整数N,M代表网格图有N行M列,接下来N行每行M个非负整数,表示此格子中财宝数量,0代表没有 Output 输出一个整数,表示至少要走多少次.…
Exclusive Access 2 Description 给出 N 个点M 条边的无向图,定向得到有向无环图,使得最长路最短. N ≤ 15, M ≤ 100 Input Format 第一行一个数M (1≤M≤100). 接下来M行,每行两个大写字母(L 到 Z),最多出线15个不同的大写字母.每行的两个大写字母不会相同. Output Format 第一行输出最长路最短的数值-1. Sample Input 3 P Q Q R R P Sample Output 1 解析 二分答案?想多…
题意:给定n个木棍的l和w,第一个木棍需要1min安装时间,若木棍(l’,w’)满足l' >= l, w' >= w,则不需要花费额外的安装时间,否则需要花费1min安装时间,求安装n个木棍的最少时间. 分析: 1.将木棍按l排序后,实质上是求按w形成的序列中的最长递减子序列. eg: 5 4 9 5 2 2 1 3 5 1 4 将木棍按l排序后,按w形成的序列为4 1 5 9 2, 则若按照4 5 9 1 2的顺序安装(按照木棍标号为1 3 4 2 5的顺序安装),只需两分钟. 容易发现,所…
题目描述 为了提高智商,ZJY开始学习组合数学.某一天她解决了这样一个问题:给一个网格图,其中某些格子有财宝.每次从左上角出发,只能往右或下走.问至少要走几次才可能把财宝全捡完. 但是她还不知足,想到了这个问题的一个变形:假设每个格子中有好多块财宝,而每一次经过一个格子至多只能捡走一块财宝,其他条件不变,至少要走几次才可能把财宝全捡完? 这次她不会做了,你能帮帮她吗? 输入输出格式 输入格式: 第一行为一个正整数t,表示数据组数 每组数据的第一行是两个正整数n和m,表示这个网格图有n行m列. 接…
题目描述 为了提高智商,ZJY开始学习组合数学.某一天她解决了这样一个问题:给一个网格图,其中某些格子有财宝.每次从左上角出发,只能往右或下走.问至少要走几次才可能把财宝全捡完. 但是她还不知足,想到了这个问题的一个变形:假设每个格子中有好多块财宝,而每一次经过一个格子至多只能捡走一块财宝,其他条件不变,至少要走几次才可能把财宝全捡完? 这次她不会做了,你能帮帮她吗? 输入输出格式 输入格式: 第一行为一个正整数t,表示数据组数 每组数据的第一行是两个正整数n和m,表示这个网格图有n行m列. 接…
题目描述 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 输入描述 Input Description 输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数) 输出描述 Output Description 输出这套系统最多能拦截多少导弹…
这题根据的Dilworth定理,链的最小个数=反链的最大长度 , 然后就是排序LIS了 链-反链-Dilworth定理 hdu1051 #include <iostream> #include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> #include <string> #include <queue> #include <…
导弹拦截是一个经典问题:求一个序列的最长不上升子序列,以及求能最少划分成几组不上升子序列.第一问是经典动态规划,第二问直接的方法是最小路径覆盖, 但是二分图匹配的复杂度较高,我们可以将其转化成求最长上升子序列,其最大值即等于不上升子序列的最小划分数.这就涉及到组合数学中偏序集的 Dilworth定理.(第二问的贪心方法其实就是这个定理的证明过程) 其中第一问和第二问都可以用o(nlogn)的算法解决: #include<cstdio> #include<cstring> #incl…
http://www.cnblogs.com/submarine/archive/2011/08/03/2126423.html dilworth定理的介绍 题目大意:求一个序列的lds 同时找出这个序列最少用几个下降子序列覆盖 题解:第一问当然非常简单,第二问不会了..准备去搬最小路径覆盖模板 结果百度了一下发现由dilworth定理可知答案就是 lis的长度...跪 代码: #include<stdio.h> #include<string> #include<strin…
3997: [TJOI2015]组合数学 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 247  Solved: 174[Submit][Status][Discuss] Description 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走多少次才能把财宝全部捡完.   Input 第一行为正整数T,代…
看到这道题感觉像是网络流,如果没有权值,可以用DAG最小路径覆盖,有权值,感觉可以求一个上下界最小可行流,但内存卡了....时间估计也悬. 正解要用到一些数学知识,这里梳理一下: 定义: 偏序关系: 满足自反,反对称,传递的关系是自反关系 链: 偏序集A的一个子集B,并且满足B中元素两两可比 反链: 偏序集A的一个子集B,并且满足B中元素两两不可比 集合的划分: 集合A的划分是很多个集合,这些集合的交集为空,并集为A Dilworth定理: 偏序集的最长反链的大小等于最小链划分 另一个定理: 偏…
P1233 木棍加工 题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间为1分钟: 如果刚处理完长度为L,宽度为W的棍子,那么如果下一个棍子长度为Li,宽度为Wi,并且满足L>=Li,W>=Wi,这个棍子就不需要准备时间,否则需要1分钟的准备时间: 计算处理完n根棍子所需要的最短准备时间.比如,你有5根棍子,长度和宽度分别为(4, 9),(5, 2),(2, 1),(…
度娘定义:在数学理论中的序理论与组合数学中,Dilworth定理根据序列划分的最小数量的链描述了任何有限偏序集的宽度.其名称取自数学家Robert P. Dilworth. 反链是一种偏序集,其任意两个元素不可比:而链则是一种任意两个元素可比的偏序集.Dilworth定理说明,存在一个反链A与一个将序列划分为链族P的划分,使得划分中链的数量等于集合A的基数.当存在这种情况时,对任何至多能包含来自P中每一个成员一个元素的反链,A一定是此序列中的最大反链.同样地,对于任何最少包含A中的每一个元素的一…
相关例题:NOIP 1999导弹拦截 遇到这题不会去网上搜Dilworth定理,太难受了,看不懂证明 但是,我知道怎么使用了,管那么多,会用就完事了 学习自这篇文章 -1.为什么我不想学证明这个定理 Dilworth定理 在数学理论中的序理论与组合数学中,Dilworth定理根据序列划分的最小数量的链描述了任何有限偏序集的宽度.其名称取自数学家Robert P. Dilworth. 定理内容 编辑 反链是一种偏序集,其任意两个元素不可比:而链则是一种任意两个元素可比的偏序集.Dilworth定理…