一、问题描述
二、解题思路
使用动态规划算法。设LS[i]为前i个元素的最长递增子系列长度,则LS[i+1]=max(1+LS[k]),k。参考《编程之美》。
三、代码
#include<iostream> using namespace std; int a[1002]; int LS[1002];//LS[i]表示前i个元素的最长递增子系列长度 int main() { int N; int i,j; scanf("%d",&N); for(i=0;i<N;++i) scanf("%d",&a[i]); for(i=0;i<N;++i) { LS[i]=1; for(j=i-1;j>=0;--j) { if(a[j]<a[i]) { if(LS[i] < LS[j]+1) LS[i]=LS[j]+1; } } } int m=0; for(i=0;i<N;++i) { if(LS[i] > m) m=LS[i]; } printf("%d\n",m); return 0; }
|
阅读(816) | 评论(0) | 转发(0) |