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

2014-11-24 10:32:43 · 作者: · 浏览: 5

题目描述 Description

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

输出长度即可。

输入描述 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


#include
   
    
using namespace std;
int main(){
	int arr[5001];
	int p[5001];
	int i,max = 0;
	cin>>i;
	
	for(int j=0;j
    
     >arr[j]; p[j] = 1; } for(int j=1;j
     
      arr[k]&&p[j]<=p[k]){ p[j] = p[k]+1; max = max>p[j] max:p[j]; } } } cout<
      
       
这题略坑,因为测试数据是按照最长严格上升子序列给的,以上是AC代码

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