codevs 1576最長嚴格上升子序列
阿新 • • 發佈:2017-06-10
blog iostream clas flask 時間 -1 put amp style
題目描述 Description
傳送門
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 Input5
9 3 6 2 7
樣例輸出 Sample Output3
數據範圍及提示 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最長嚴格上升子序列