51nod--1134 最长递增子序列 (动态规划)
来源:互联网 发布:php输出中文乱码 编辑:程序博客网 时间:2024/05/25 08:14
题目:
给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的)
例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。
Input
第1行:1个数N,N为序列的长度(2 <= N <= 50000)
第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)
Output
输出最长递增子序列的长度。
Input示例
8
5
1
6
8
2
4
5
10
Output示例
5
分析:
令 Dp[i] = 长度为 i + 1 的上升子序列的中末尾元素最小值(不存在就是INF)
则可以最开始Dp[i] 全部设置为INF。 然后由前到后逐个考虑数列元素, 对于
每个 Num[j] , 如果 i = 0, 或者 Dp[i-1] < Num[j] 就可以用
Dp[i] = min(Dp[i], Num[j]) 进行更新。
实现:
#include <bits/stdc++.h>using namespace std;typedef long long LL;const int INF = 0x7fffffff;const int maxn = 50000 + 131;int Dp[maxn], Num[maxn];int main() { int N; while(cin >> N) { for(int i = 0; i < N; ++i) cin >> Num[i]; fill(Dp, Dp+N, INF); for(int i = 0; i < N; ++i) { *lower_bound(Dp, Dp+N, Num[i]) = Num[i]; } cout << lower_bound(Dp, Dp+N, INF) - Dp << endl; }}
0 0
- 51nod--1134 最长递增子序列 (动态规划)
- 51nod 1134 最长递增子序列(动态规划)
- 最长递增子序列-动态规划dp-(51nod 1134)(POJ 2533)
- 最长递增子序列(动态规划)
- 最长递增子序列(动态规划)
- 最长递增子序列(动态规划)
- 51nod 1134 最长递增子序列
- 51nod 1134 最长递增子序列
- 51nod 1134 最长递增子序列
- [51nod]1134 最长递增子序列
- 51nod 1134 最长递增子序列
- 51Nod 1134 最长递增子序列
- 51nod 1134最长递增子序列
- 51nod 1134 最长递增子序列
- 51Nod 1134 最长递增子序列
- 【51nod】1134 最长递增子序列
- 51Nod-1134 最长递增子序列
- 51nod 1134 最长递增子序列
- FragmentTransaction replace add
- linux清理内存
- 文件处理之浏览文件
- file的getPath getAbsolutePath和getCanonicalPath的不同
- RadioButton使用方法
- 51nod--1134 最长递增子序列 (动态规划)
- SpringMVC之application-context.xml,了解数据库相关配置
- C# 编写计算器
- C++扬帆远航——12(抓小偷)
- C++ 阶乘
- java线程死锁问题
- Ajax学习笔记
- Biorhythms
- 常用的Git代码托管平台