Problem Solving/BOJ [백준 11055번] [동적 계획법] 가장 큰 증가 부분 수열 - 728x90 반응형 Approach 완전 탐색으로 이 문제를 처리한다고 하면 비둘기집의 원리에 따라서 중복되는 연산이 매우 많다는 사실을 쉽게 캐치할 수 있다. dp[i] = i번째 수부터 시작하는 LIS 중 합이 가장 큰 값 dp[i] = max(v[i], max{dp[i + j] + v[i]}) for all j s.t v[i] < v[j] Code #include <bits/stdc++.h> #define fastio ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0) using namespace std; vector<int> v; int n; int dp[1001]; int memoi(int k){ int& ret = dp[k]; if(ret != -1) return ret; int cmp = v[k]; for(int i = k + 1; i < n; i++){ if(v[k] < v[i]){ cmp = max(cmp, memoi(i) + v[k]); } } return ret = cmp; } int main(void){ fastio; memset(dp, -1, sizeof(dp)); cin >> n; for(int i = 0; i < n; i++){ int t; cin >> t; v.push_back(t); } int result = -1; for(int i = 0; i < n; i++){ result = max(result, memoi(i)); } cout << result << "\n"; return 0; } 반응형 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기비룡의 컴퓨터이야기 Contents Approach Code 당신이 좋아할만한 콘텐츠 [백준 6549번] [스택] 히스토그램에서 가장 큰 직사각형 2021.12.09 [백준 1725번] [스택] 히스토그램 2021.12.09 [백준 16500번] [동적 계획법] 문자열 판별 2021.12.08 [백준 10844번] [동적 계획법] 쉬운 계단 수 2021.12.04 댓글 0 + 이전 댓글 더보기