最长上升子序列
•对于一个序列如(1,7,3,5,9,4,8),它有一些上升子序列,如(1,7),(3,5,8)。这些上升子序列中最长的长度为4,比如(1,3,5,9)。要求对于给定的序列,求出它的最长上升子序列的长度。
思路:
•对于序列中的每一个数a[k],设以它为右端点的序列的最长上升子序列长度为dp[k]。
dp[k]是这样来计算的:
•Dp[k]=max(dp[i],i=1 to k-1 &&a[i]<a[k])+1
•也就是所有比a[k]小的数a[i],它们最大的dp,再加上1,就是dp[k]。
代码:
//最长上升子序列
#include <stdio.h>
const int maxN=100;
int dp[maxN];
int a[maxN] ;
int main()
{
int n, i,j,max,re=1;
scanf("%d", &n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
dp[0]=1;
for(i=1;i<n;i++){
max=1;
for(j=0;j<i;j++){
if(a[j]<a[i]&&dp[j]>max)max=dp[j];
}
dp[i]=max+1;
if(dp[i]>re)re=dp[i];
}
printf("%d\n",re);
return 0;
}