最长不下降子序列——序列型动态规划

来源:互联网 发布:idc国际数据公司怎么样 编辑:程序博客网 时间:2024/06/06 15:49

给一个数组a1, a2 ... an,找到最长的不下降子序列ab1<=ab2<= .. <=abk,其中b1<b2<..bk。

输出长度即可。

第一行,一个整数N。

第二行 ,N个整数(N < = 5000)

输出K的极大值,即最长不下降子序列的长度

5

9 3 6 2 7

3

【样例解释】

最长不下降子序列为3,6,7


#include<iostream>using namespace std;int main(){int arr[5001];int p[5001];int i,max = 0;cin>>i;for(int j=0;j<i;j++){cin>>arr[j];p[j] = 1;}for(int j=1;j<i;j++){for(int k=0;k<j;k++){if(arr[j]>arr[k]&&p[j]<=p[k]){p[j] = p[k]+1;max = max>p[j]?max:p[j];}}}cout<<max<<endl;return 0;}

这题略坑,因为测试数据是按照最长严格上升子序列给的,以上是AC代码

写最长不下降子序列的只给你80分,要注意arr[j]>arr[k]而不是arr[j]>=arr[k]

1 0
原创粉丝点击