dp入门---最长上升子序列--nefu 21
2015-04-17 23:17
316 查看
最长上升子序列
一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1 <= i1 < i2 < ... < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8).
你的任务,就是对于给定的序列,求出最长上升子序列的长度。
input
输入的第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000。
output
输出最长上升子序列的长度。
样例
7
1 7 3 5 9 4 8
输出
4
代码:
一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1 <= i1 < i2 < ... < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8).
你的任务,就是对于给定的序列,求出最长上升子序列的长度。
input
输入的第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000。
output
输出最长上升子序列的长度。
样例
7
1 7 3 5 9 4 8
输出
4
代码:
#include <iostream> #include <string.h> using namespace std; int main() { int a[1005],n,b[10005],max; while(cin>>n) {memset(b,0,sizeof(b)); for(int i=1;i<=n;i++) { cin>>a[i]; } for(int i=1;i<=n;i++) {b[i]=1; for(int j=1;j<=i;j++) { if(a[j]<a[i]) dp[i]=max(dp[i],dp[j]+1); } } max=-1; for(int i=1;i<=n;i++) { if(b[i]>max) max=b[i]; } cout<<max<<endl; } return 0; }
相关文章推荐
- DP入门,最长上升子序列,ZJU 2136
- 九度OJ 1131:合唱队形 (DP、最长上升下降序列)
- 最长公共上升子序列 (dp)
- 最长公共子序列与最长上升子序列--再学DP
- 关于最长上升子序列的算法 简单dp
- POJ 2533 求最长上升子序列长度 非DP 实现
- 输出最长上升子序列 模型(DP)
- [算法] poj 3903 最长上升子序列 dp vs (二分 nlogn)
- DP-最长上升序列
- POJ 2533 Longest Ordered Subsequence (最长上升子序列 DP优化)
- 九度OJ 1131:合唱队形 (DP、最长上升下降序列)
- code 2185 最长公共上升子序列 (dp)
- [算法] poj 3903 最长上升子序列 dp vs (二分 nlogn)
- sdut1299 最长上升子序列(dp入门)
- UVa 10534 - Wavio Sequence DP+最长上升子序列(严格上升)+二分查找(nlogn)
- HDU 1160 FatMouse's Speed 最长上升子序列,重拾DP
- HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】
- HDU 1087 Super Jumping! Jumping! Jumping!(最长上升子序列,dp)
- bzoj3173 [Tjoi2013]最长上升子序列 dp Treap
- codevs 3955 最长严格上升子序列(加强版)(DP)