PKU2533 最长上升子序列 DP
2010-08-20 16:45
357 查看
Longest Ordered Subsequence
Description
A numeric sequence of ai
is ordered if a1
< a2
< ... < aN
. Let the subsequence of the given numeric sequence (a1
, a2
, ..., aN
) be any sequence (ai1
, ai2
, ..., aiK
), where 1 <= i1
< i2
< ... < iK
<= N
. For example, sequence (1, 7, 3, 5, 9, 4, 8) has ordered subsequences, e. g., (1, 7), (3, 4, 8) and many others. All longest ordered subsequences are of length 4, e. g., (1, 3, 5, 8).
Your program, when given the numeric sequence, must find the length of its longest ordered subsequence.
Input
The first line of input file contains the length of sequence N. The second line contains the elements of sequence - N integers in the range from 0 to 10000 each, separated by spaces. 1 <= N <= 1000
Output
Output file must contain a single integer - the length of the longest ordered subsequence of the given sequence.
Sample Input
7
1 7 3 5 9 4 8
Sample Output
4
毫无疑问
,
最长上升子序列
…
当作练习
nlogn
的算法把它水掉了
…
代码如下
:
Time Limit: 2000MS | | Memory Limit: 65536K |
Total Submissions: 15397 | | Accepted: 6552 |
A numeric sequence of ai
is ordered if a1
< a2
< ... < aN
. Let the subsequence of the given numeric sequence (a1
, a2
, ..., aN
) be any sequence (ai1
, ai2
, ..., aiK
), where 1 <= i1
< i2
< ... < iK
<= N
. For example, sequence (1, 7, 3, 5, 9, 4, 8) has ordered subsequences, e. g., (1, 7), (3, 4, 8) and many others. All longest ordered subsequences are of length 4, e. g., (1, 3, 5, 8).
Your program, when given the numeric sequence, must find the length of its longest ordered subsequence.
Input
The first line of input file contains the length of sequence N. The second line contains the elements of sequence - N integers in the range from 0 to 10000 each, separated by spaces. 1 <= N <= 1000
Output
Output file must contain a single integer - the length of the longest ordered subsequence of the given sequence.
Sample Input
7
1 7 3 5 9 4 8
Sample Output
4
毫无疑问
,
最长上升子序列
…
当作练习
nlogn
的算法把它水掉了
…
代码如下
:
#include<stdio.h> #include<string.h> #define MAXN 1005 int i,n,a[MAXN],c[MAXN],len[MAXN],pos,max,total; int find(int a,int l,int r) { int mid=(l+r)/2; while (l<=r) { if (c[mid]==a) return mid; else { if (a>c[mid]) l=mid+1; else r=mid-1; mid=(l+r)/2; } } return l; } int main() { while (scanf("%d",&n)!=EOF) { for (i=1;i<=n;++i) scanf("%d",&a[i]); for (i=1;i<=n;++i) c[i]=20000; c[1]=a[1]; len[1]=1; total=1; max=1; for (i=1;i<=n;++i) { pos=find(a[i],1,total+1); c[pos]=a[i]; len[i]=pos; if (pos>max) {max=pos;total++;} } printf("%d/n",max); } return 0; }
相关文章推荐
- POJ 2533-Longest Ordered Subsequence(dp_最长上升子序列)
- poj2533--Longest Ordered Subsequence(dp:最长上升子序列)
- DP LIS(最长上升子序列) POJ 2533 POJ 1836 POJ 2138 HDU 1069
- pku 2533 最长上升子序列
- DP LIS(最长上升子序列) POJ 2533 POJ 1836 POJ 2138 HDU 1069
- poj 2533 Longest Ordered Subsequence (DP:最长上升子序列)
- POJ-2533 Longest Ordered Subsequence (线性dp 最长上升子序列)
- HDU 1087 && POJ 2533(DP,最长上升子序列).
- 简单的dp@POJ(3)2533 最长上升子序列
- POJ-2533(最长上升子序列(简单dp))
- poj2533--Longest Ordered Subsequence(dp:最长上升子序列)
- 【dp-LIS】牛客网 --最长上升子序列 POJ 2533--Longest Ordered Subsequence(LIS模板题)
- POJ 2533 Longest Ordered Subsequence(DP最长上升子序列O(n^2)&&O(nlogn))
- HDU 1025 Constructing Roads In JGShining's Kingdom (简单dp, 最长上升子序列LIS)
- DP练习 最长上升子序列nlogn解法
- POJ 1836 Alignment(DP最长上升子序列)
- poj 2533 最长上升子序列
- 【基础练习】【线性DP】codevs1576 最长严格上升子序列题解
- HDU 1160 FatMouse's Speed 最长上升子序列 简单DP
- (hdu step 3.2.3)Super Jumping! Jumping! Jumping!(DP:求最长上升子序列的最大和)