DP
dp
배열에 i
번째 수 까지 가장 긴 증가하는 부분 수열의 길이를 저장한다.
i
번째 수 까지 가장 긴 증가하는 부분 수열의 길이를 구하기 위해선 i
번째 이하의 1~i-1
의 구간의 수를 j
라 할 때in[i]
가 in[j]
보다 크다면 dp[j]+1
, 작다면 dp[j]
를 선택한 값의 최대값을 구하면 된다. 답은 dp[1]
~dp[n]
까지의 수 중 최대값이다.
#include<iostream>
using namespace std;
int dp[1001];
int in[1001];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>in[i];
int ans=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=i;j++){
if(in[j]<in[i])
dp[i]=max(dp[i],dp[j]+1);
}
ans=max(dp[i],ans);
}
cout<<ans;
}
[백준] 2565번 전깃줄 (C) (0) | 2020.04.12 |
---|---|
[백준] 11054번 가장 긴 바이토닉 부분 수열 (C) (0) | 2020.04.09 |
[백준] 2156번 포도주 시식 (C) (0) | 2020.03.30 |
[백준] 10844번 쉬운 계산 수 (C) (0) | 2020.03.30 |
[백준] 1932번 정수 삼각형 (C) (0) | 2020.03.29 |