[模型转化 最长下降子序列] BZOJ 2924 [Poi1998]Flat broken lines
2016-12-17 11:25
309 查看
将坐标系向左旋转45度,那么折线就要求x,y均不降,以x为第一关键字,y为第二关键字排序,那么一条折线就对应一个不降子序列。
根据最小链覆盖=最长反链,故求出最长下降子序列的长度即可
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int N=30005;
struct abcd{
int x,y;
void read(){
int ix,iy; scanf("%d%d",&ix,&iy); x=ix-iy; y=iy+ix;
}
bool operator < (const abcd &B) const{
return x==B.x?y<B.y:x<B.x;
}
bool operator == (const abcd &B) const{
return x==B.x && y==B.y;
}
};
int n;
abcd A
;
int a
;
int c
; int len;
int f
;
int main(){
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
scanf("%d",&n); for (int i=1;i<=n;i++) A[i].read();
sort(A+1,A+n+1);
n=unique(A+1,A+n+1)-A-1;
for (int i=1;i<=n;i++) a[i]=-A[i].y;
f[1]=1; c[++len]=a[1];
for (int i=2;i<=n;i++){
if (a[i]>c[len])
c[++len]=a[i];
else{
int iter=lower_bound(c+1,c+len+1,a[i])-c;
c[iter]=a[i];
}
}
printf("%d\n",len);
return 0;
}
根据最小链覆盖=最长反链,故求出最长下降子序列的长度即可
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int N=30005;
struct abcd{
int x,y;
void read(){
int ix,iy; scanf("%d%d",&ix,&iy); x=ix-iy; y=iy+ix;
}
bool operator < (const abcd &B) const{
return x==B.x?y<B.y:x<B.x;
}
bool operator == (const abcd &B) const{
return x==B.x && y==B.y;
}
};
int n;
abcd A
;
int a
;
int c
; int len;
int f
;
int main(){
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
scanf("%d",&n); for (int i=1;i<=n;i++) A[i].read();
sort(A+1,A+n+1);
n=unique(A+1,A+n+1)-A-1;
for (int i=1;i<=n;i++) a[i]=-A[i].y;
f[1]=1; c[++len]=a[1];
for (int i=2;i<=n;i++){
if (a[i]>c[len])
c[++len]=a[i];
else{
int iter=lower_bound(c+1,c+len+1,a[i])-c;
c[iter]=a[i];
}
}
printf("%d\n",len);
return 0;
}
相关文章推荐
- BZOJ2924 : [Poi1998]Flat broken lines
- 【BZOJ】2924: [Poi1998]Flat broken lines
- BZOJ 4758 [Usaco2017 Jan] 区间dp->最长不下降+翻转子序列
- BZOJ 1852 最长不下降序列
- BZOJ 1046 DP 逆求最长下降序列+枚举
- bzoj 4282: 慎二的随机数列 最长不下降序列
- BZOJ 1852 [MexicoOI06]最长不下降序列(贪心+DP+线段树+离散化)
- BZOJ1046(HAOI2007)[上升序列]--最长下降子序列预处理
- 【BZOJ1609】[Usaco2008 Feb]Eating Together麻烦的聚餐【最长不下降子序列】
- 最长上升或下降子序列解法 总结
- HDU Problem E [ 最长下降子序列 堆箱子]——基础dp模板题变式
- ZOJ 1025 Wooden Sticks 【思维 + 最长下降子序列 + Dilworth定理】
- 最长不下降子序列(LIS)
- 算法:最长上升下降子序列
- 最长不下降子序列(O(N^2))
- nlogn的最长不下降子序列【tyvj1254挑选士兵】
- tyvj 1049 最长不下降子序列 n^2/nlogn
- 洛谷P2766最长不下降子序列问题(网络流24题)
- 最长不下降子序列的O(n*logn)算法
- BZOJ3173[最长上升子序列] Treap+LIS