POJ 2533 Longest Ordered Subsequence 可以说是非常简单的dp了

A numeric sequence of  ai is ordered if  a1 <  a2 < ... <  aN. Let the subsequence of the given numeric sequence (  a1a2, ...,  aN) be any sequence (  ai1ai2, ...,  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

求最长递增子序列的长度,就这样,嗯。

代码拿昨天那道跳一跳(地址)改一改就是了,区别一个是状态转移方程里面是dp[j]+1而不是dp[j]+a[i],另一个是要把dp数组初始化为1,因为第i个数最长递增子序列最短为1,即只有它本身。所以dp[i]=max(dp[i],a[i])这条语句也没有用武之地了。

AC代码:

#include 
#include 
#include 
using namespace std;

int main()
{
    int a[1010],dp[1010],n;
    while(cin>>n&&n)
    {
        memset(dp,0,sizeof(dp));
        for(int i=0;i>a[i];
        //dp[0]=a[0];
        for(int i=0;i

你可能感兴趣的:(训练)