分析:
用动态规划解决,dp[i]表示a[0..i]的最长递减子序列,dp满足:
对于任意k, 0<=k<i
dp[i] = max{dp[k]+1, a[k]>a[i]}
如果对于任意 0<=k<i a[k] <= a[i]
dp[i] = 1
int lis(int *a, int n)
{
int *dp = new int[n];
dp[0] = 1;
int max_i = 0;
int max_len = 1;
for(int i = 1; i < n; i++)
{
dp[i] = 1;
for(int k = 0; k < i; i++)
{
if(a[k] > a[i] && dp[k]+1>dp[i]) {
dp[i] = dp[k]+1;
if(dp[i] > max_len){
max_len = dp[i];
max_i = i;
}
}
}
}
return max_len;
}