1. 程式人生 > >codevs 1576最長嚴格上升子序列

codevs 1576最長嚴格上升子序列

blog iostream clas flask 時間 -1 put amp style

傳送門

1576 最長嚴格上升子序列

時間限制: 1 s 空間限制: 256000 KB 題目等級 : 黃金 Gold
題目描述 Description

給一個數組a1, a2 ... an,找到最長的上升降子序列ab1<ab2< .. <abk,其中b1<b2<..bk。

輸出長度即可。

輸入描述 Input Description

第一行,一個整數N。

第二行 ,N個整數(N < = 5000)

輸出描述 Output Description

輸出K的極大值,即最長不下降子序列的長度

樣例輸入 Sample Input

5

9 3 6 2 7

樣例輸出 Sample Output

3

數據範圍及提示 Data Size & Hint

【樣例解釋】

最長不下降子序列為3,6,7

【思路】

序列dp

dp[i]為以a[i]為終點的最長不下降子序列的長度,所以最後要+1;

【code】

#include<iostream>
#include<cstdio>
using namespace std;
int n,ans;
int a[5004],dp[5004];
int main()
{
    scanf("%d",&n);
    for(int i=1
;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) { for(int j=1;j<i;j++) { if(a[j]<a[i]) dp[i]=max(dp[i],dp[j]+1); ans=max(ans,dp[i]); } } printf("%d\n",ans+1); return 0; }

codevs 1576最長嚴格上升子序列