HDU 1257 最少拦截系统 最长递增子序列

题意

这个题的意思是说给你\(n\)个数,让你找到他最长的并且递增的子序列\((LIS)\)。这里和最长公共子序列一样\((LCS)\)一样,子序列只要满足前后关系即可,不需要相邻。

解题思路

解法一:这个可以用动态规划来实现,\(dp[i]\)代表前\(i\)个数列中以第\(i\)个数为结尾的\(LIS\)的长度。递推关系如下:

\[dp[i] = \begin{aligned} & max(dp[k])+1 & \text{k=1,2...(i-1)} \end{aligned}
\]

复杂度为\(n^2\)。

解法二:这里一个\(dp[i]\),但是代表是长度为\(i\)的子序列中最后一个元素是多少,这里这个元素要尽量小。因为在同等长度下,最后一个结尾的数值越小”越好“。复杂度为\(nlogn\)。效率很高了。

这个递推关系有点复杂,详情看代码实现或者搜索\(LIS\)会有相关的博客讲解。

代码实现

//解法一的形式
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e3+7;
int dp[maxn][2];
int n;
int main() {
while(scanf("%d",&n)!=EOF) {
for(int i=1; i<=n; i++) {
scanf("%d", &dp[i][0]);
dp[i][1]=1;
}
int ans=1;
for(int i=2; i<=n; i++) {
for(int j=1; j<i; j++) {
if(dp[j][0] < dp[i][0] && dp[j][1]+1 > dp[i][1])
dp[i][1]=dp[j][1]+1;
}
ans=max(ans, dp[i][1]);
}
printf("%d\n",ans);
}
return 0;
}
//解法二
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=1e3+7;
int dp[maxn], num[maxn];
int n;
int main() {
while(scanf("%d", &n)!=EOF) {
for(int i=1; i<=n; i++) {
scanf("%d",&num[i]);
dp[i]=inf;
}
int j, ans=0;
for(int i=1; i<=n; i++) {
j=lower_bound(dp+1, dp+n+1, num[i])-dp;
ans=max(ans, j);
dp[j]=num[i];
}
printf("%d\n", ans);
} return 0;
}

HDU 1257 最少拦截系统 最长递增子序列的更多相关文章

  1. hdu 1257 最少拦截系统 求连续递减子序列个数 (理解二分)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  2. HDU 1257 最少拦截系统(贪心 or LIS)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1257 最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)   ...

  3. HDU 1257最少拦截系统[动态规划]

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1257                                                 最 ...

  4. POJ - 2533 Longest Ordered Subsequence与HDU - 1257 最少拦截系统 DP+贪心(最长上升子序列及最少序列个数)(LIS)

    Longest Ordered Subsequence A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let ...

  5. HDU 1257 最少拦截系统【最长上升子序列】

    解题思路:可以转化为求最长上升子序列来做,还是可以用an与按升序排列后的an求LCS来做,为防止超时,用滚动数组优化一下就可以了. 最少拦截系统 Time Limit: 2000/1000 MS (J ...

  6. hdu 1257 最少拦截系统【贪心 || DP——LIS】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1257 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  7. HDU 1257——最少拦截系统——————【LIS变型题】

    最少拦截系统 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  8. HDU 1257 最少拦截系统(Dilworth定理+LIS)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  9. HDU 1257 最少拦截系统 (DP || 贪心)

    最少拦截系统 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...

随机推荐

  1. web前端:上传文件夹(需支持多浏览器)

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  2. 使用ElementUI创建项目

    从 0 开始搭建 element 项目 第一步,安装 Nodejs/NPM https://nodejs.org/zh-cn/download/ 下载安装即可! 第二步,安装 vue-cli 打开 c ...

  3. python3笔记十八:python列表元组字典集合文件操作

    一:学习内容 列表元组字典集合文件操作 二:列表元组字典集合文件操作 代码: import pickle  #数据持久性模块 #封装的方法def OptionData(data,path):    # ...

  4. kkfileview v2.0 发布,文件在线预览项目方案

    kkfileview文件在线预览 此项目为文件文档在线预览项目解决方案,项目使用流行的spring boot搭建,易上手和部署,部署好后可以独立提供预览服务,使用http接口访问,不需要和应用集成,具 ...

  5. Java 8:用Stream来循环集合

    本文由 ImportNew - 进林 翻译自 deadcoderising.欢迎加入翻译小组.转载请见文末要求. 正如我之前所写的,Java 8中的新功能特性改变了游戏规则.对Java开发者来说这是一 ...

  6. UVA 1025 -- A Spy in the Metro (DP)

     UVA 1025 -- A Spy in the Metro  题意:  一个间谍要从第一个车站到第n个车站去会见另一个,在是期间有n个车站,有来回的车站,让你在时间T内时到达n,并且等车时间最短, ...

  7. 关于 LDTP 操纵 windows 控件。

    LDTP doc:  https://ldtp.freedesktop.org/user-doc/ 对于 web 自动化,我们用 Selenium, 但是对于 windows 控件,我们可以使用 LD ...

  8. leetcode 分割回文串

    这个方法有问题,这是计算所有子串组成的所有回文子串:而不是所有分割的回文子串: class Solution { public: vector<vector<string>> ...

  9. GitHub Port 443 Refused

    最近在本地Github上传和更新远程仓库的时候老是显示 GitHub - failed to connect to github 443 windows/ Failed to connect to g ...

  10. Elasticsearch 6.2.3版本 filtered 报错问题 no [query] registered for [filtered]

    背景描述 近期在学习<Elasticsearch 权威指南>上的一些基本命令,在操作到 filtered 进行过滤查询的时候,报错 “no [query] registered for [ ...