toj 1765. Longest Ordered Subsequence
2014-07-29 11:39
155 查看
最长上升子序列问题,下面有两种方法:
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
Sample Output
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
#include<iostream> using namespace std; int main(){ int n,a[1001],b[1001],k; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; k=0; for(int i=0;i<n;i++){ b[i]=1; for(int j=0;j<i;j++){ if(a[j]<a[i]&&b[i]<b[j]+1) b[i]=b[j]+1; } if(k<b[i]) k=b[i]; } cout<<k<<endl; //system("pause"); return 0; }
#include <stdio.h> #include <algorithm> #include <string.h> using namespace std; int a[1005],dp[1005],c[1005],n; int bin(int size,int k) { int l = 1,r = size; while(l<=r) { int mid = (l+r)/2; if(k>c[mid] && k<=c[mid+1]) return mid+1; else if(k<c[mid]) r = mid-1; else l = mid+1; } } int LIS() { int i,j,ans=1; c[1] = a[1]; dp[1] = 1; for(i = 2; i<=n; i++) { if(a[i]<=c[1]) j = 1; else if(a[i]>c[ans]) j = ++ans; else j = bin(ans,a[i]); c[j] = a[i]; dp[i] = j; } return ans; } int main() { int i; while(~scanf("%d",&n)) { for(i = 1; i<=n; i++) scanf("%d",&a[i]); printf("%d\n",LIS()); } return 0; }
相关文章推荐
- TOJ 1765. Longest Ordered Subsequence
- HDU 3530 Subsequence
- 516. Longest Palindromic Subsequence
- TOJ 1001
- 673[Medium]: Number of Longest Increasing Subsequence
- leetcode 392. Is Subsequence
- 【第十一周】673. Number of Longest Increasing Subsequence
- 674. Longest Continuous Increasing Subsequence
- POJ 1458 Common Subsequence(最长公共子序列问题)
- 674. Longest Continuous Increasing Subsequence
- HDU4632:Palindrome subsequence(区间DP+容斥原理)
- LeetCode 521. Longest Uncommon Subsequence I
- Codeforces Round #452 E. New Year and Old Subsequence
- BinarySearch-300-Longest Increasing Subsequence
- SDUTOJ(2463)学密码学一定得学程序
- TOJ1743 集合运算 Set
- poj 2533:Longest Ordered Subsequence 求最长递增序列长度
- poj3061 Subsequence【尺取法】
- Subsequence
- 300. Longest Increasing Subsequence