POJ--2533 Longest Ordered Subsequence

       鹏神意外得到了神灯。

  神灯中冒出了灯神,灯神说道:“我将给你一个有序的数列,你可以在保证原有顺序不变的前提下,挑出任意多的数。如果你挑出的数字是严格升序的,那么这段数字的个数就是你女朋友的个数。”

  “妈的智障。”鹏神骂道。

  但是鹏神还是希望自己能有尽可能多的女朋友。所以他求救于你,希望你能帮他算出他最多能有多少女朋友。

Input

  输入包含多组数据。

  第一行是以为整数N,表示灯神给出的数列的长度。(1≤N≤1000)

  第二行包含N个整数,即是灯神给出的序列。

Output

  对于每组输入数据,请输出最终答案,即鹏神最多可以得到的女朋友个数。

Sample Input

7
1 7 3 5 9 4 8

Sample Output

4

题意:求最长上升子序列中元素的个数

题解:dp[i] 表示以第i个元素结尾(包括i)的最长子序列中元素的个数,状态转移方程:dp[i]=max(dp[i],dp[j]+1)  (j<i)

代码:

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int main()
 5 {
 6     int n,a[1010],dp[1010];
 7     while(scanf("%d",&n)!=EOF)
 8     {
 9         for(int i=0;i<n;i++)
10             scanf("%d",&a[i]);
11         for(int i=0;i<n;i++)
12         {
13             dp[i]=1;
14             for(int j=0;j<i;j++)
15             {
16                 if(a[i]>a[j])
17                 {
18                     dp[i]=max(dp[i],dp[j]+1);
19                 }
20             }
21         }
22         int ans=0;
23         for(int i=0;i<n;i++)
24         {
25             if(dp[i]>ans)
26             {
27                 ans=dp[i];
28             }    
29         } 
30         printf("%d
",ans);   
31     }
32     return 0;
33 }
原文地址:https://www.cnblogs.com/hss-521/p/7305737.html