题意:求二维偏序的最少链划分。

用到Dilworth定理:最少链划分=最长反链。(对偶也成立,个人认为区别只是一个维度上的两个方向,写了个简单的证明

相关概念:偏序集,链,反链等等概念可以参考这里:http://www.cnblogs.com/fstang/archive/2013/03/31/2991220.html

Dilworth定理的证明(英文的):http://aleph.math.louisville.edu/teaching/2009FA-681/notes-091119.pdf

证明

简要来说,设链的最小划分数为p,最长反链长度为l,证明分两步:

(1).p≥l。因为反链上任意两点都不可能在同一个链中,抽屉原理可知p≥l。

(2).p≤l。反复选择反链的极小元点集Xi从全集S中删除直到S为空,

每次阶段的选择的Xi则构成一个链划分(这个可以反证,如果Xi存在a和b无法比较,那么反链中是可比的,则a和b不可能同时是反链的极小元)

最后一次删除将会对应最长的反链。所以链划分了l次,而p是最小链划分,所以有l≥p。

至于实现上,我采用的是O(nlogn)的逆向求LIS的方法来得到最长反链的。

(似乎根据证明第二步可以得出贪心做法,不过因为要排序时间复杂度还是O(nlogn)。

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
//#include<bits/stdc++.h>
using namespace std;const int N = 5e3+5;struct Stick
{int l, w;bool operator <(const Stick &th) const{return l < th.l || (l == th.l && w < th.w);}void IN(){ scanf("%d%d",&l,&w); }
}stick[N];int g[N];//#define LOCAL
int main()
{
#ifdef LOCALfreopen("in.txt","r",stdin);
#endifint T; cin>>T;while(T--){int n; scanf("%d",&n);for(int i = 0; i < n; i++){stick[i].IN();}sort(stick,stick+n);memset(g,0x3f,sizeof(int)*n);int ans = 0;for(int i = n-1; i >= 0; i--){int k = lower_bound(g+1,g+n-i,stick[i].w)-g;ans = max(ans,k);g[k] = stick[i].w;}printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/jerryRey/p/4885732.html

POJ 1065 Wooden Sticks(LIS,最少链划分)相关推荐

  1. poj 1065 Wooden Sticks

    /* 先按l排序 再每次找出一段最长的递增序列! */ #include <stdio.h> #include <stdlib.h> #include <string.h ...

  2. Wooden Sticks POJ - 1065(最大上升子序列+动态规划状态转移思维)

    题意: 给你n个木棍的长度和重量,让其成为上升序列,如果不能达到,就需要重新一分钟设置. a)第一个木棍的准备时间为1分钟. b)在处理长度为l和重量为w的棒之后,如果l <= l'并且w &l ...

  3. HDU-1051 Wooden Sticks

    Wooden Sticks       Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  4. 1270: Wooden Sticks [贪心]

    点击打开链接 1270: Wooden Sticks [贪心] 时间限制: 1 Sec 内存限制: 128 MB 提交: 31 解决: 11 统计 题目描述 Lialosiu要制作木棍,给n根作为原料 ...

  5. 欧拉路径 之 poj 2513 Colored Sticks

    /* 欧拉路径 之 poj 2513 Colored Sticks欧拉路径: 若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径.无向图存在欧拉路径 充要条件:1) 图是连通的 ...

  6. 判断线段相交 + vector. erase迭代指针 的使用 poj 2653 Pick-up sticks

    题目来源:http://poj.org/problem?id=2653 分析: 题意:按顺序给出一些木棍,输出在最上面的木棍标号. 用vector 存储木棍标号, 当前木棍与 vector 中的木棍 ...

  7. 【代码超详解】ZOJ 2551 / POJ 2653 Pick-up Sticks(快速排斥实验 + 跨立实验判断线段是否相交 · 模板)

    一.传送门 http://poj.org/problem?id=2653 https://zoj.pintia.cn/problem-sets/91827364500/problems/9182736 ...

  8. ZOJ 1025 Wooden Sticks(快排+贪心)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=25 题目大意:机器运送n个木条,每个木条有一个长度和重量.运送第一根木 ...

  9. hdu1051 Wooden Sticks

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1051 大意:求最少升序序列的个数. #include <cstdio> #include &l ...

最新文章

  1. jquery Fancybox插件的应用
  2. Request_继承体系
  3. 剑指offer之找到链表里面包含环的入口节点
  4. 6月20日云栖精选夜读丨国内首家!阿里云宣布全面提供IPv6服务
  5. 记录android离屏渲染的一些资料
  6. 一文详解Python中的*可变参数与**关键字参数
  7. 伪代码之KMeans和DBSCAN
  8. scan ip和vip的关系疑惑
  9. 深度学习框架tensorflow学习与应用——代码笔记11(未完成)
  10. 【PAT甲级A1003 】Emergency (25分)(c++)
  11. 战地系列服务器架设,战地3服务器架设数据库
  12. 运动耳机性价比高,运动耳机品牌排行榜
  13. argue的一个用法
  14. 【Shell】在windows下编辑shell脚本
  15. AjaxSubmit提交额外数据
  16. fms5序列号_CentOS下安装FMS5.0 互联网技术圈 互联网技术圈
  17. waveform波形图(时域图)、spectrum(频谱图)、spectrogram(语谱图)、MFCC
  18. 第4课:Scratchjr运动指令
  19. 电商网站购物车存储方式
  20. 使用obsidian数据同步至Git,从而解决obsidian多端同步收费的问题-windows

热门文章

  1. 地址栏引用PHP中变量,PHP 读取地址栏 参数
  2. php fastdfs扩展,php如何安装fastdfs扩展
  3. 计算机游戏攻略67,保卫萝卜2 67攻略水晶萝卜详解
  4. mysql query profiler_MySQL Query Profiler
  5. Web的新图像格式WebP
  6. json转java代码_Java代码:javabean和json互转
  7. 高一计算机会考英语,高中会考英语单词表.doc
  8. ubuntu18 防火墙关闭_Ubuntu防火墙怎么关闭或打开?
  9. client中周期性边界_化工中的流体力学问题(附多物理场视频)
  10. python的集合类型_python集合类型