๐ ๋ฌธ์ ํ์ด ๊ณผ์
- BOJ:11053 ๋ฌธ์ ์์ ์ฝ๋ ํ ์ค๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.
- DP ๋ฐฐ์ด์ ๊ฐ ์์์์ ๊ฐ์ง ์ ์๋ ๊ฐ์ฅ ๊ธด ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ฅผ ์ ์ฅํ๋ค.
- i๋ฒ์งธ์์ DP[i] = 1, ์ฆ ๊ธธ์ด 1๋ก ์ด๊ธฐํํ๊ณ , i๋ฒ์งธ ์ ๊น์ง ์์ ๊ฐ๊ณผ i๋ฒ์งธ ๊ฐ๊ณผ ๋น๊ตํด์ A[i] < A[j]์ด๋ฉด DP[i]๋ฅผ ์ค์ ํด์ค๋ค.
- ์ด๋, ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๋ฏ๋ก DP[j]์์ i๋ฒ์งธ๋ฅผ ๋ํ๋ฉด +1์ด ๋๋ DP[j]+1๊ณผ, DP[i]์์ ๋ ํฐ ๊ฐ์ ๊ฐ์ ธ์จ๋ค. => max ํจ์ ์ฌ์ฉ
- ๋ง์ง๋ง์ DP ๋ฐฐ์ด์์ ๊ฐ์ฅ ํฐ ๊ฐ์ max_element ํจ์๋ก ์ถ๋ ฅํ๋ค.
๐ป C++ ์ ์ถ์ฝ๋
#include <stdio.h>
#include <algorithm>
using namespace std;
int main(){
int N;
scanf("%d", &N);
int A[N] = {};
int DP[N] = {};
for(int i=0; i<N; i++) scanf("%d", &A[i]);
for(int i=0; i<N; i++){
DP[i] = 1;
for(int j=0; j<i; j++){
if(A[i] < A[j]) DP[i] = max(DP[i], DP[j]+1);
}
}
printf("%d", *max_element(DP, DP+N));
}
๐ ๊ฒฐ๊ณผ