POJ 1065 Wooden Sticks(LIS,最少链划分)
题意:求二维偏序的最少链划分。
用到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+; 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 LOCAL
freopen("in.txt","r",stdin);
#endif
int T; cin>>T;
while(T--){
int n; scanf("%d",&n);
for(int i = ; i < n; i++){
stick[i].IN();
}
sort(stick,stick+n);
memset(g,0x3f,sizeof(int)*n);
int ans = ;
for(int i = n-; i >= ; i--){
int k = lower_bound(g+,g+n-i,stick[i].w)-g;
ans = max(ans,k);
g[k] = stick[i].w;
}
printf("%d\n",ans);
}
return ;
}
POJ 1065 Wooden Sticks(LIS,最少链划分)的更多相关文章
- POJ 1065 Wooden Sticks / hdu 1257 最少拦截系统 DP 贪心
参考链接:http://blog.csdn.net/xiaohuan1991/article/details/6956629 (HDU 1257 解题思路一样就不继续讲解) POJ 1065题意:给你 ...
- POJ 1065 Wooden Sticks
Wooden Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16262 Accepted: 6748 Descri ...
- HDU ACM 1051/ POJ 1065 Wooden Sticks
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- POJ 1065 Wooden Sticks (贪心)
There is a pile of n wooden sticks. The length and weight of each stick are known in advance. The st ...
- POJ 1065 Wooden Sticks(zoj 1025) 最长单调子序列
POJ :http://poj.org/problem?id=1065 ZOJ: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId= ...
- poj -1065 Wooden Sticks (贪心or dp)
http://poj.org/problem?id=1065 题意比较简单,有n跟木棍,事先知道每根木棍的长度和宽度,这些木棍需要送去加工,第一根木棍需要一分钟的生产时间,如果当前木棍的长度跟宽度 都 ...
- poj 1065 Wooden Sticks 【贪心 新思维】
题目地址:http://poj.org/problem?id=1065 Sample Input 3 5 4 9 5 2 2 1 3 5 1 4 3 2 2 1 1 2 2 3 1 3 2 2 3 1 ...
- POJ 1065 Wooden Sticks【贪心】
题意: 有一些木棍,每个有长度和重量,要求把这些木棍排成若干两个属性值均不下降的序列.问至少要分为多少个序列.且要保证排出来的子序列数最少. 思路: ( 9 , 4 ) ,( 2 , 5 ) ,( 1 ...
- POJ - 1065 Wooden Sticks(贪心+dp+最长递减子序列+Dilworth定理)
题意:给定n个木棍的l和w,第一个木棍需要1min安装时间,若木棍(l’,w’)满足l' >= l, w' >= w,则不需要花费额外的安装时间,否则需要花费1min安装时间,求安装n个木 ...
随机推荐
- opesntack基础知识-软件包历史脉络
软件包管理 软件包管理是每个OpenStack项目的基础,其目的是用来将项目代码打包成源码包或者二进制包进行分发.一个项目的代码可能会被打包放到PyPI上,这样你可以通过pip命令安装这个包:也可能会 ...
- PHP5 $this self parent static的区别
PHP5 是一具备了大部分面向对象语言的特性的语言,比PHP4 有了很多的面向对象的特性,但是有部分概念也比较绕人,所以今天拿出来说说,说 的不好,请高手见谅. (阅读本文,需要了解PHP5 的面向对 ...
- SQL Server 2012 安装——安装 OR 卸载
前言 上篇介绍了.net framework 3.5的安装,这次介绍一下,SQL Server2012的安装和彻底卸载.根据百度,下面是自己根据自己实际情况整理的安装步骤: 安装 见安装步骤( ...
- iOS回顾笔记( 01 )-- XIB和纯代码创建应用的对比
header{font-size:1em;padding-top:1.5em;padding-bottom:1.5em} .markdown-body{overflow:hidden} .markdo ...
- QPS,TPS,吞吐量,响应时间详解及关系
并发数 并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力 吞吐量吞吐量是指单位时间内系统能处理的请求数量,体现系统处理请求的能力,这是目前最常用的性能测试指标 响应时间RT(Respo ...
- image在div中有留白如何解决
解决办法: 1. 将img图片display:block,即可去掉div和img之间的空白: 2. 将div的line-height设置得足够小,也可以去掉空白,例如div{line-height:5 ...
- 怎么在Vue中使用Base64格式的背景
问题发生于一次mock数据,生成了base64格式的东西,因为编码包在一个变量中,不知道怎么直接在 :style 中引入. 解答1:格式background-image: url(此处是我们mock生 ...
- Angular2.0的学习(四)
第四节课:数据绑定.响应式编程和管道 1.数据绑定(插值表达式.事件绑定.属性绑定.双向绑定) 2.响应式编程 3.管道
- JS——制作简单的网页计算器
用JS做了一个简易的网页计算器 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- (转)Linux系统stat指令用法
<Linux系统stat指令用法> 原文:https://www.cnblogs.com/linux-super-meng/p/3812695.html stat指令:文件/文件系统的详 ...