BOJ 11053 :: 가장 긴 증가하는 부분 수열
문제 링크 : https://www.acmicpc.net/problem/11053
나는 아직 for문 여러 개를 사용해서 다이나믹 프로그래밍 하는 것에 서툰 것 같다!!
옛날에 살짝 공부했던 적이 있는 LIS 기초 부분인데도 제대로 풀지 못했다 ㅠㅠ..
알고리즘에 대한 공부를 명확히 하고 문제를 다시 풀어봐야 겠다!!
나의 풀이
1. 배열의 기준점을 두번째 index에서 가장 긴 곳까지 두면서 비교한다.
2. 배열의 0번에서 기준점까지 점진적으로 비교하면서 증가하는 수열이 될 때에 dp배열을 갱신시킨다.
3. 모든 dp배열을 채운 후, 그 중 가장 큰 값을 찾아 출력한다.
나의 코드
Github : https://github.com/j2wooooo/Daliy_Algorithms/blob/master/Daliy_Algorithms/BOJ_11053/BOJ_11053.cpp
// 백준알고리즘 11053번 :: 가장 긴 증가하는 부분 수열#include<iostream>#include<string.h>#define max(a , b) (a > b) ? a : bint N, ans;int arr[1001];int dp[1001];using namespace std;int main(void){cin >> N;for (int i = 0; i < N; i++){cin >> arr[i];dp[i] = 1;}for (int i = 1; i < N; i++){for (int j = 0; j < i; j++){// 뒤가 더 크면 증가하는 수열이다. 길이를 갱신한다.if (arr[j] < arr[i]) dp[i] = max(dp[i], dp[j] + 1);}}ans = dp[0];for (int i = 0; i < N-1; i++){if (ans < dp[i + 1]) ans = dp[i + 1];}cout << ans;return 0;}
'Problem > DP' 카테고리의 다른 글
[C/C++] BOJ 11055 :: 가장 큰 증가 부분 수열 (0) | 2019.02.24 |
---|---|
[C/C++] BOJ 11722 :: 가장 긴 감소하는 부분 수열 (0) | 2019.02.24 |
[C/C++] BOJ 1932 :: 정수 삼각형 (0) | 2019.02.23 |
[C/C++] BOJ 11052 :: 카드 구매하기 (0) | 2019.02.20 |
[C/C++] BOJ 2306 :: 유전자 (0) | 2019.02.19 |