Algorithm/Algorithm 문제 풀이
[BAE/<JOON> 문제풀이] 가장 긴 감소하는 부분 수열 (DP.029)
폭풍저그머성찡
2020. 5. 5. 21:17
https://www.acmicpc.net/problem/11722
11722번: 가장 긴 감소하는 부분 수열
수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} 이고, 길이는 3이다.
www.acmicpc.net
더보기
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
vector<int> arr;
vector<int> dp;
cin >> n;
arr.resize(n + 1);
dp.resize(n + 1);
for (int i = 1; i <= n; i++) {
cin >> arr[i];
dp[i] = 1;
}
dp[0] = 0;
for (int i = 2; i <= n; i++) {
for (int j = 1; j < i; j++) {
if (arr[i] < arr[j]) {
dp[i] = (dp[i] > dp[j] + 1 ? dp[i] : dp[j] + 1);
}
}
}
int mx = -1;
for (int i = 1; i <= n; i++) {
if (mx < dp[i]) mx = dp[i];
}
cout << mx;
}