최장 상승 서브 시퀀스 (dp 클래식)

1670 단어 DP
Problem Description
b1Input
입력한 첫 번째 행은 시퀀스의 길이 N(1 <= N <= 1000)입니다.두 번째 행에서는 0~10000의 범위에 해당하는 시퀀스의 N개의 정수를 제공합니다.
Output
최장 상승 서열의 길이.
Sample Input
7
1 7 3 5 9 4 8

Sample Output
4

Hint
Source
Northeastern Europe 2002
고전적 해법:
#include
using namespace std;
int dp[1010];
int a[1010];
int ans;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<=n;i++)
    {
        dp[i]=1;
        for(int j=1;j

2분 최적화 버전:
#include
using namespace std;
const int INF=0x3f3f3f3f;
int dp[1010];
int a[1010];
int ans;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    fill(dp+1,dp+1+n,INF);
    for(int i=1;i<=n;i++)
    {
        int x=lower_bound(dp+1,dp+1+n,a[i])-dp;//lower_bound         a[i]   ,       
        dp[x]=a[i];
        //*lower_bound(dp+1,dp+1+n,a[i])=a[i];//            ,  *      ,        a[i]
    }
    cout<

좋은 웹페이지 즐겨찾기