1. 程式人生 > >POJ2533-Longest Ordered Subsequence

POJ2533-Longest Ordered Subsequence

之前做的方法有點忘了,思路不太好想,今天看一個視訊的方法是用二分解決,簡單易懂。

視訊也分享下,

免費的哦。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<math.h>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF){
            
    int a[1010];
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    int dp[1100]={0};
    int k=0;
    dp[k++]=a[0];
    
    for(int i=1;i<n;i++)
    {
        int o=lower_bound(dp,dp+k,a[i])-dp;
        if(dp[o]<a[i])
            if(dp[o]==0)    dp[o]=a[i],k=max(k,o+1);
            else            dp[o]=min(dp[o],a[i]),k=max(k,o+1);
        else dp[o]=a[i];
    }
    printf("%d\n",k);
    }
    return 0;
}