题意转换为:给定n个数,求两个最长的不相交的LIS。

dp[i][j]表示当前两个LIS末尾为i和j时的dp值。(其实是 <= i和 <= j时的dp值)

dp[i][j] = max(dp[i][k])+1, k <= j;

我们只要先将答案存在一个数组里,然后统一更新dp数组的行值与列值即可。

 #include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
using namespace std; struct p{
int h, d;
p(){}
p(int h, int d):h(h), d(d){}
bool operator <(const p& x) const{
return h != x.h? h > x.h : d < x.d;
}
};
p pp[];
int s[];
int dp[][], tmp[]; void add(int* a, int x, int d){
for(int i = x; i < ; i += i&-i)
a[i] = max(a[i], d);
}
int sum(int* a, int x){
int ret = ;
for(int i = x; i; i -= i&-i)
ret = max(ret, a[i]);
return ret;
} int main(){
int t, n; scanf("%d", &t);
while(t--){
scanf("%d", &n);
for(int i = ; i < n; i++){
scanf("%d%d", &pp[i].h, &pp[i].d);
s[i] = pp[i].d;
}
sort(pp, pp+n);
sort(s, s+n);
for(int i = ; i < n; i++)
pp[i].d = lower_bound(s, s+n, pp[i].d)-s+; memset(dp, , sizeof(dp));
int ans = ;
for(int i = ; i < n; i++){
int v = pp[i].d;
for(int j = ; j <= n; j++){
tmp[j] = sum(dp[j], v)+;
ans = max(ans, tmp[j]);
}
for(int j = ; j <= n; j++){
add(dp[j], v, tmp[j]);
add(dp[v], j, tmp[j]);
}
}
printf("%d\n", ans);
}
return ;
}

最优复杂度能做到nlogn,参考杨氏图表。

类似题

求两个不相交的上升子序列和下降子序列,使得序列长度之和最大

http://hihocoder.com/problemset/problem/1918

hdu5406 CRB and Apple dp+两个LIS的更多相关文章

  1. tyvj 1067 dp 两次LIS(nlogn)

    P1067 合唱队形 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2004 提高组 第三道 描述     N位同学站成一排,音乐老师要请其中的(N ...

  2. 2015 Multi-University Training Contest 10 hdu 5406 CRB and Apple

    CRB and Apple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  3. HDU 5087 (线性DP+次大LIS)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5087 题目大意:求次大LIS的长度.注意两个长度相同的LIS大小比较,下标和大的LIS较大. 解题思 ...

  4. DP(两次) UVA 10163 Storage Keepers

    题目传送门 /* 题意:(我懒得写,照搬网上的)有n个仓库,m个人看管.一个仓库只能由一个人来看管,一个人可以看管多个仓库. 每个人有一个能力值pi,如果他看管k个仓库,那么所看管的每个仓库的安全值为 ...

  5. 【HDU 4352】 XHXJ's LIS (数位DP+状态压缩+LIS)

    XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. DP 魔族密码 LIS

    题目描述 风之子刚走进他的考场,就…… 花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花) 风之子:我呕……(杀死人的眼神)快说题目!否则……-_-### 花花:……咦好冷我们现在 ...

  7. HDU.4352.XHXJ's LIS(数位DP 状压 LIS)

    题目链接 \(Description\) 求\([l,r]\)中有多少个数,满足把这个数的每一位从高位到低位写下来,其LIS长度为\(k\). \(Solution\) 数位DP. 至于怎么求LIS, ...

  8. 线性DP总结(LIS,LCS,LCIS,最长子段和)

    做了一段时间的线性dp的题目是时候做一个总结 线性动态规划无非就是在一个数组上搞嘛, 首先看一个最简单的问题: 一,最长字段和 下面为状态转移方程 for(int i=2;i<=n;i++) { ...

  9. [正经分析] DAG上dp两种做法的区别——拓扑序与SPFA

    在下最近刷了几道DAG图上dp的题目. 要提到的第一道是NOIP原题<最优贸易>.这是一个缩点后带点权的DAG上dp,它同时规定了起点和终点. 第二道是洛谷上的NOI导刊题目<最长路 ...

随机推荐

  1. java事务的类型——面试被问到

    Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 1.JDBC事务 JDBC 事务是用 Connection 对象控制的.JDBC Conne ...

  2. django 自定义标签和过滤器

    django 自定义标签和过滤器 Django支持自定义标签和过滤器.起初还不太重视它这项功能,但最近试了试自定义标签.发现django这个功能实在是太爽了. 首先在你项目的一个app中建立一个pyt ...

  3. easyui的页面等待提示层,即mask

    /* * 使用方法: * 开启:MaskUtil.mask(); * 关闭:MaskUtil.unmask(); * * MaskUtil.mask('其它提示文字...'); */ var Mask ...

  4. JSTL.带标签体的标签,方法和例子

    1. 实现 forEach 标签: 两个属性: items(集合类型, Collection), var(String 类型) doTag: 遍历 items 对应的集合 把正在遍历的对象放入到 pa ...

  5. 基本Socket通信流程

    服务器常用模型 1.初始化Socket (用于监听) 1)初始化 SOCKET s ; s =  Socket ( ... ) 2)绑定 bind(s, ...); 3)监听 listen(s, .. ...

  6. UVa 11624,两次BFS

    题目链接:http://vjudge.net/contest/132239#problem/A 题目链接:https://uva.onlinejudge.org/external/116/11624. ...

  7. 2016年11月21日 星期一 --出埃及记 Exodus 20:12

    2016年11月21日 星期一 --出埃及记 Exodus 20:12 "Honor your father and your mother, so that you may live lo ...

  8. ContentProvider官方教程(3)ContentResolver查询、遍历 示例

    Retrieving Data from the Provider This section describes how to retrieve data from a provider, using ...

  9. redis pool

    Redis Pool--Java 配置文件 #redis conf ADDR=127.0.0.1 PORT= AUTH= #session timeout TIMEOUT= MAX_ACTIVE= M ...

  10. SqlSever基础 group by之后,加having 对分组之后的数据在进行处理

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...