LIS问题:二分+DP
实现代码: int Longest_increasing_subseq(vector<int> &array){ vector<int> dp(array.size()); dp[0]=-1; int left,right,mid; int count=0; for(int i=0;i<array.size();++i){ left=0; right=count; while(left<=right){ mid = (left+right)/2; if(array[i]<dp[mid]){ right=mid-1; }else if(array[i]>dp[mid]){ left=mid+1; }else{ cout << "case Error happened!\n"; } } if(dp[left]==0){ dp[left]=array[i]; ++count; } else{ dp[left]=min(dp[left],array[i]); } } return count; } 应用于解决问题:https://app.codility.com/programmers/lessons/90-tasks_from_indeed_prime_2015_challenge/slalom_skiing/ SlalomSkiing: int solution(vector<int>