Search
Duplicate

가장 긴 증가하는 부분 수열 (11053)

생성일
2021/03/20 18:19
태그

문제

풀이

처음에 그냥 set 에 넣고 그 크기만 재면 될거라고 생각했는데 틀렸다.
사실 아직도 논리가 뭐가 틀렸는지 잘 모르겠다.
일반항
현재 index를 앞에있는 값중에
나보다 작으면서 가장 큰값 + 1 을 dp에 대입

구현

#include <iostream> #include <vector> #include <set> using namespace std; int n; vector<int> arr; vector<int> dp; void pre() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); } void input() { cin >> n; arr.resize(n); dp.resize(n, 0); for(int i = 0; i < n; i++) cin >> arr[i]; } int rec(int index) { if (index == n) return (dp[index - 1]); for(int i = 0; i < index; i++) if (arr[i] < arr[index]) dp[index] = max(dp[index], dp[i]); dp[index]++; return (max(rec(index + 1), dp[index])); } void solve() { cout << rec(0) << endl; } int main() { input(); solve(); return (0); }
C++
복사