4.17记录 LIS其二
4.17记录 LIS其二
输出最终结果的LIS。
思路相比传统的LIS来讲,一是原来的队列二分不那么好用了(队列模拟最终得出来的那个所谓LIS实际并不是真实的情况),二是需要加一点东西来存这个队列,也就是链表。
建议熟读并背诵。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int head[100001],a[100001];
void find(int x){if(~head[x]) find(head[x]);printf("%d ",a[x]);
}
int main(){int n = 0,i,j,rear,telipu = -1,dp[100001];memset(head,-1,sizeof(head));while(scanf("%d",&a[++n]) != EOF);--n;for(i = 1;i <= n;i++) dp[i] = 1;for(i = 2;i <= n;i++){for(j = 1;j < i;j++){if(a[j] < a[i] && dp[j] + 1 > dp[i]){dp[i] = dp[j] + 1;head[i] = j;if(telipu < dp[i]){//维护一个最大值telipu = dp[i];rear = i;}}//dp[i] = max(dp[i],dp[j]);}}printf("max=%d\n",telipu);find(rear);return 0;
}
除此之外,还有一个导弹拦截问题。这题可以队列模拟了,不过二分比较讲究。
这题直接一分为二(源代码中我也加上了分隔),前半段是最长不上升子序列,find找的是第一个不大于它的数;后半段是最长上升子序列,find找的是第一个不小于它的数。所以这两次替换l = mid + 1的条件是不一样的,一次是大于等于,一次是小于。这和别的二分处理方式是一样的,看最后两个数的取法决定到底带不带等。
总之感觉这题考的不是贪心也不是DP而是二分…
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int Q[100001],a[100001],rear;
int find(int x){int l = 1,r = rear,mid;while(l < r){mid = (l + r) >> 1;if(Q[mid] < x) r = mid;else l = mid + 1;}return l;
}
int anfind(int x){int l = 1,r = rear,mid;while(l < r){mid = (l + r) >> 1;if(Q[mid] < x) l = mid + 1;else r = mid;}return l;
}
int main(){int i,j,k,n = 0;Q[0] = 2e9;while(scanf("%d",&a[++n]) != EOF);--n;for(i = 1;i <= n;i++){if(Q[rear] >= a[i]) Q[++rear] = a[i];else{k = find(a[i]);Q[k] = a[i];}}printf("%d\n",rear);
//--------------------------------------------------memset(Q,0,sizeof(Q));rear = 0;for(i = 1;i <= n;i++){if(Q[rear] < a[i]) Q[++rear] = a[i];else{k = anfind(a[i]);Q[k] = a[i];}}printf("%d\n",rear);return 0;
}
4.17记录 LIS其二相关推荐
- hdu 4352 XHXJ's LIS
题意: 先定义一个数的power value,把这个数看成一个字符串,他的最长上升子序列的长度就是他的power value,求某个区间内power value等于k的数的个数. 解法: 很显然要数位 ...
- [冲昏头脑]IDEA中的maven项目中学习log4j的日志操作
第一,你要有log4j的对应的包,由于我用的maven,所以直接在pom.xml文件依赖下载则可,如你尚为有此包,请自行百度下载导入,或上http://www.mvnrepository.com/搜索 ...
- 经典算法题每日演练——第六题 协同推荐SlopeOne 算法
原文:经典算法题每日演练--第六题 协同推荐SlopeOne 算法 相信大家对如下的Category都很熟悉,很多网站都有类似如下的功能,"商品推荐","猜你喜欢&quo ...
- 百度之星试题每周一练
百度之星,是全球最大的中文搜索引擎,百度公司面向中国高校学生和编程爱好者所举办的高水平的程序设计大赛.他所考试的题目,全部都是算法的题目. 鄙人虽然是一个.net程序员,在工作之余,喜爱算法. 这个问 ...
- 《机器学习》周志华-CH1 绪论
文章目录1.1 引言1.2 基本术语(极其重要)1.3 假设空间1.4 归纳偏好1.5 发展历程1.6 应用现状习题 1.1 引言 机器学习(machine learning)的定义:它致力于研究如何 ...
- DEAP:使用生理信号进行情绪分析的数据库(一、背景介绍与刺激选择)
来源CSDN网友HaZyiCe的授权分享 在此非常感谢HaZyiCe! 本篇文章主要介绍了用于情绪分析的生理信号数据库DEAP的简介,包括创建该数据库的目的.实验的设计.数据的采集以及实验的分析等. ...
- mysql dump xtrabackup_MySQL--备份恢复【Mysqdump+xtrabackup(XBK)】
1.运维在数据库备份恢复方面的职责 1.设计备份策略 全备 .增量.时间.自动 2.日常备份检查 备份存在性 备份空间够用否 3.定期恢复演练(测试库) 一季度 或者 半年 4.故障恢复 通过现有备份 ...
- python知识点博客园_python零碎知识点一
1.一行代码实现1--100之和 >>> sum(range(1,101)) 5050 2.如何在一个函数内部修改全局变量 a=5 print("修改之前的a的值: %s& ...
- Java集合--TreeMap
转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3310928 第1部分 TreeMap介绍 TreeM ...
最新文章
- 虚拟桌面环境需要一个什么样的接入网络?
- java学习:Iterator数据加工厂
- OVS DPDK--虚拟设备配置(六)
- 串口初始化结构体和固件库讲解
- 谷歌表格_如何使用宏自动执行Google表格
- Luogu4735 最大异或和
- 浅谈ARMv7-A协处理器CP15
- Android开发笔记(九十一)工厂模式
- 【考证】大一规划、考证大军、水水水!
- Notion for Mac(多功能办公笔记软件)V2.0.10官方版
- idea 项目启动找不到页面问题和run/debug只能启动一个的问题
- 值类型和引用类型 区别
- 数据挖掘导论课后习题答案-第六章
- 解决啦啦外卖小程序无法生成桌台小程序二维码
- 笔趣看小说Python3爬虫抓取
- Mysql 复制表结构
- unity材质球发光_Unity3D - 发光材质(Emissive Materials)
- python一键批量制作word邀请函
- 监控日志loging Elasticsearch(性能优化八)
- 学习必要的理财知识会让你更快的富起来!